当前在使用MVC开发一个网站,习惯了使用ASP.NET中控件,转到MVC之后突然对于页面和后台代码的传值感觉无从下手。花了点时间在网上看了写帖子后,想到了一个方法,重新构造一个新Model, 然后利用Model在页面和代码之间传值。

举例来说:

我数据库中有张学生表(Student),表中字段分别为:ID, StudentNo, StudentName, Gender, Birth, Domicile, Phone, Mail。相应的我的代码中有个名为Student的Model, 我想实现根据学生的学号,姓名,性别等条件从数据库中查询出符合条件的结果集。并将结果集在View中显示。

1。在View中提供输入框,使用户能够输入查询条件

2。在View中提供提交按钮,用户输入查询条件以后,点击提交按钮获得查询结果

3。难题出现了,如何将用户输入的查询条件传到Controler 代码中,并将查询到的结果返回到View中?

方法:

创建一个新Model,新Model比如取名叫Search,它包含两个部分,第一部分是查询条件(StuNo, StuName, Gender, ...),第二部分是查询结果(List<Student> StuResults).

创建基于Search类型的View,把Search传到View中,当点击提交按钮时,将 Search Model传到Controller,在Controller中得到Search类的查询条件,根据条件查询符合条件的Student的结果,将结果赋值给Search类的StuResults。然后将Search重新传回View。

代码:

新建Model

  1. namespace CertTitle.Models
  2. {
  3. public class Search
  4. {
  5. #region Search by Condition
  6. public string EntryID { get; set; }
  7. public string Title { get; set; }
  8. public string CDM { get; set; }
  9. public string Owner { get; set; }
  10. #endregion end of search condition
  11.  
  12. #region Search Results
  13. public List<ExamEntry> ResultList { get; set; }
  14. #endregion end of search result
  15. }
  16. }

Controller

  1. public ActionResult Lookup()
  2. {
  3. Search result = new Search();
  4. result.EntryID = "";
  5. result.Title = "";
  6. result.CDM = "";
  7. result.Owner = "";
  8. result.ResultList = new List<ExamEntry>();
  9. return View(result);
  10. }
  11.  
  12. [HttpPost]
  13. public ActionResult Lookup(Search search)
  14. {
  15. string exam = search.EntryID;
  16. string keywordsInTitle = search.Title;
  17. string CDM = search.CDM;
  18. string AssignedTo = search.Owner;
  19. var results = db.ExamEntries.Where(e => (e.ExamID == exam||e.Title.Contains (keywordsInTitle)||
  20. e.CDM ==CDM ||e.AssignedTo == AssignedTo)).ToList();
  21. if (results != null)
  22. search.ResultList = results;
  23. return View(search);
  24. }

View

  1. @using CertTitle.Models
  2. @model CertTitle.Models.Search
  3.  
  4. @{
  5. ViewBag.Title = "Lookup";
  6. Layout = "~/Views/Shared/_Layout.cshtml";
  7. }
  8.  
  9. <h2>Find Titles</h2>
  10.  
  11. <div>
  12. @using (Html.BeginForm())
  13. {
  14. <fieldset>
  15. <legend>Type Exam# which you want to find</legend>
  16. <div>
  17. Exam# @Html.TextBoxFor(model => model.EntryID) | Title @Html.TextBoxFor(model =>model.Title) |
  18. CDM @Html.TextBoxFor(model => model.CDM) | Assigned To @Html.TextBoxFor(model => model.Owner) |<input type="submit" value="Search" />
  19. </div>
  20. <div>
  21.  
  22. </div>
  23. </fieldset>
  24. }
  25. </div>
  26.  
  27. <table id="tbInfo">
  28. <thead>
  29. <tr>
  30. <th>EXAM#</th>
  31. <th>VER</th>
  32. <th>LAN</th>
  33. <th>PjM</th>
  34. <th>CDM</th>
  35. <th>Status</th>
  36. <th>REQUIRE</th>
  37. <th>ACTUAL</th>
  38. <th>ISSUE1</th>
  39. <th>ISSUE2</th>
  40. <th></th>
  41. </tr>
  42. </thead>
  43. <tbody>
  44. @foreach (var item in Model.ResultList)
  45. {
  46. <tr>
  47. <td>@Html.ActionLink(@item.ExamID,"Detail",new {id = @item.ID})</td>
  48. <td>@item.Version</td>
  49. <td>@item.Language</td>
  50. <td>@item.PjM</td>
  51. <td>@item.CDM</td>
  52. <td>@CertTitleHelper.TaskStatusConverter(@item.Status)</td>
  53. <td>@item.PlanFinishDate</td>
  54. <td>@item.ActualFinishDate</td>
  55. <td>
  56. @Html.ActionLink(@item.IssueCount.ToString(),"ViewIssueByTitle","CertIssue",new {id = @item.ID},null)
  57. </td>
  58. <td>
  59. @Html.ActionLink(@item.IssueCountToEDP.ToString(),"ViewIssueByTitle","CertIssue",new {id = @item.ID},null)
  60. </td>
  61. <td style="width: 150px">
  62. @Html.ActionLink("Edit","Edit",new{id = @item.ID}) |
  63. @Html.ActionLink("Missed Issue", "MissIssue", "CertIssue", new { id = @item.ID}, null)
  64. </td>
  65. </tr>
  66. <tr>
  67. <td></td>
  68. <td colspan="4">@item.Title</td>
  69. <td>@item.AssignedTo</td>
  70. </tr>
  71. }
  72. </tbody>
  73. </table>

View中使用到了一个

CertTitleHelper.TaskStatusConverter(int? )的方法,此方法根据一个Int型的值转换成相应的字符串值,例如枚举的转换。

枚举在数据库中显示为Int,在页面中需要显示其字符串。转换代码如下

  1. namespace CertTitle.Models
  2. {
  3. public class CertTitleHelper
  4. {
  5. public static string TaskStatusConverter(int? status)
  6. {
  7. switch (status)
  8. {
  9. case (int)TaskStatus.NotAssigned:
  10. return TaskStatus.NotAssigned.ToString();
  11. case (int)TaskStatus.Issues:
  12. return TaskStatus.Issues.ToString();
  13. case (int)TaskStatus.InProgress:
  14. return TaskStatus.InProgress.ToString();
  15. case (int)TaskStatus.Complete:
  16. return TaskStatus.Complete.ToString();
  17. default:
  18. return TaskStatus.NotAssigned.ToString();
  19. }
  20. }
  21. }
  22. }

MVC 构造新Model实现内容搜索的更多相关文章

  1. GBDT原理及利用GBDT构造新的特征-Python实现

    1. 背景 1.1 Gradient Boosting Gradient Boosting是一种Boosting的方法,它主要的思想是,每一次建立模型是在之前建立模型损失函数的梯度下降方向.损失函数是 ...

  2. Redis 实战 —— 10. 实现内容搜索、定向广告和职位搜索

    使用 Redis 进行搜索 P153 通过改变程序搜索数据的方式,并使用 Redis 来减少绝大部分基于单词或者关键字进行的内容搜索操作的执行时间. P154 基本搜索原理 P154 倒排索引 (in ...

  3. .net mvc web api 返回 json 内容,过滤值为null的属性

    原文:http://blog.csdn.net/xxj_jing/article/details/49508557 版权声明:本文为博主原创文章,未经博主允许不得转载. .net mvc web ap ...

  4. Asp.net MVC 4新项目中创建area的后续操作

    Asp.net MVC 4新项目中创建area后,往往HomeController与area的HomeController路由发生混淆,需要手工设置一些地方避免mvc无法识别默认路由的状况. 无废话具 ...

  5. MVC模式(Model View Controller)下实现数据库的连接,对数据的删,查操作

    MVC模式(Model View Controller): Model:DAO模型 View:JSP  在页面上填写java代码实现显示 Controller:Servlet 重定向和请求的转发: 若 ...

  6. 利用GBDT模型构造新特征具体方法

    利用GBDT模型构造新特征具体方法 数据挖掘入门与实战  公众号: datadw   实际问题中,可直接用于机器学**模型的特征往往并不多.能否从"混乱"的原始log中挖掘到有用的 ...

  7. ASP.NET MVC中默认Model Binder绑定Action参数为List、Dictionary等集合的实例

    在实际的ASP.NET mvc项目开发中,有时会遇到一个参数是一个List.Dictionary等集合类型的情况,默认的情况ASP.NET MVC框架是怎么为我们绑定ASP.NET MVC的Actio ...

  8. Matrix Power Series(POJ 3233 构造新矩阵求解+ 快速矩阵幂)

    题目大意:给定A,k,m(取模),求解S = A + A2 + A3 + … + Ak. 思路:此题为求解幂的和,一开始直接一个个乘,TLE.时间消耗在累加上.此处巧妙构造新矩阵 p=    A 0 ...

  9. ASP.NET MVC中对Model进行分步验证的解决方法

    原文:ASP.NET MVC中对Model进行分步验证的解决方法 在我之前的文章:ASP.NET MVC2.0结合WF4.0实现用户多步注册流程中将一个用户的注册分成了四步,而这四个步骤都是在完善一个 ...

随机推荐

  1. ooize简介

    在Hadoop中执行的任务有时候需要把多个Map/Reduce作业连接到一起,这样才能够达到目的.[1]在Hadoop生态圈中,有一种相对比较新的组件叫做Oozie[2],它让我们可以把多个Map/R ...

  2. GBK编码相关

    如上图.的GBK编码是A3AE, 那么·对应的无符号整数值应该是A*16**3+E*16**2+A+3, 无符号整数值所在地址的第一个自己是A3,第二个字节是AE

  3. 解决ACTIVITI流程图设置字体不生效的问题

    在ACTIVITI 5.15的版本中,有一个设置流程图的字体配置. 配置如下: <bean id="processEngineConfiguration" class=&qu ...

  4. shell学习记录002-知识点储备

    1.echo "4*0.33" |bc    #计算机功能的运用 [root@oc3408554812 shell]# ss=22; [root@oc3408554812 shel ...

  5. qml 相关的博客

    http://qt-project.org/wiki/SpaceAppsChallengeResources http://www.ics.com/blog https://www.ics.com/d ...

  6. linux 线程操作问题undefined reference to 'pthread_create'的解决办法(cmake)

    问题原因: pthread 库不是 Linux 系统默认的库,连接时需要使用静态库 libpthread.a. 所以在使用pthread_create()创建线程时,需要链接该库. 1. 终端:问题解 ...

  7. 学习KMP算法的一点小心得

    KMP算法应用于 在一篇有n个字母的文档中 查找某个想要查找的长度为m的单词:暴力枚举:从文档的前m个字母和单词对比,然后是第2到m+1个,然后是第3到m+2个:这样算法复杂度最坏就达到了O(m*n) ...

  8. EntityFramework之创建数据库及基本操作(一)

    那时学EF的时候还没有Code First,只有DB First,生成的是一个EDMX文件,Code First则没有这文件,下面直接上代码吧 数据库创建以及建表 1.首先我们新建一个新项目,使用Nu ...

  9. ASP.NET MVC学习之路由篇(2)

    7.解决与物理路径的冲突 当发送一个请求至ASP.NET MVC时,其实会检查网站中存不存在这个请求的物理路径文件,如果存在的话,就会直接将这个物理文件返回.但是有时候我们需要它执行控制器的某个方法, ...

  10. BCP批量导入数据时候如何处理表中自动增加的字段

    大容量导入数据时保留标识值 (SQL Server) http://msdn.microsoft.com/zh-cn/library/ms186335(v=sql.120).aspx 使用格式化文件跳 ...