当前位置 > 首页 > Asp.net

Asp.Net MVC4入门指南 官方教程本土化之七--增加搜索方法和视图

2012-12-6 14:27:00来源:Asp.net

译者注:本节内容实际上是原英文教程第六节的后半部分,因感觉跟第六节内容较长,本部分内容与上节标题(添加编辑方法和视图)无关,在项目开发中搜索功能既常见又常用,在此拿出来作为单独章节。

本节课程中,你将添加一个SearchIndex 方法,使你可以通过片名来搜索影片。 /Movies/SearchIndex地址将可用。该请求将显示一个包含用户可以输入的input元素的表单来查找影片。当用户提交表单后,该方法将得到用户提交的搜索值并用于搜索数据库。

首先在现有的MoviesController类中增加一个SearchIndex方法。该方法将返回包含Html表单的视图。以下为代码:

public ActionResult SearchIndex(string searchValue)
{
//linq方式,查询所有影片,仅定义,不执行
var movies = from m in db.Movies
select m;
if (string.IsNullOrEmpty(searchValue) == false)
{
//基于linq查询结果的Lambda表达式,调用where方法后执行linq
movies = movies.Where(m => m.Name.Contains(searchValue));
}
return View(movies);
}

查询操作是延迟执行的,意味着表达式的值运算直到值被遍历或者调用ToList方法才会被执行。在这个例子中,查询是在SearchIndex视图中执行的。想了解更多关于查询延迟执行方面的信息,请参见Query Execution

现在你可以实现 SearchIndex视图,由它来呈现用户表单。在SearchIndex方法内部右键单击,选择添加视图。在对话框中,勾选“创建强类型视图”,然后指定你将传递Movie对象给视图模板作为它的模型类。在支架模板列表中,选择List后点击添加,如下图所示

点击添加按钮后,视图模板Views\Movies\SearchIndex.cshtml将被创建。因为你选择了支架模板中的List,Visual Studio在视图中自动生成一些默认标记。支架系统查看Movie类并为其每个属性创建了<Label>属性元素,形成HTML表单。以下为视图文件:

@model IEnumerable<MvcMovie.Models.Movie>

@{
ViewBag.Title
= "SearchIndex";
}

<h2>SearchIndex</h2>

<p>
@Html.ActionLink(
"Create New", "Create")
</p>
<table>
<tr>
<th>
@Html.DisplayNameFor(model
=> model.Name)
</th>
<th>
@Html.DisplayNameFor(model
=> model.Genra)
</th>
<th>
@Html.DisplayNameFor(model
=> model.Price)
</th>
<th>
@Html.DisplayNameFor(model
=> model.Date)
</th>
<th></th>
</tr>

@foreach (
var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem
=> item.Name)
</td>
<td>
@Html.DisplayFor(modelItem
=> item.Genra)
</td>
<td>
@Html.DisplayFor(modelItem
=> item.Price)
</td>
<td>
@Html.DisplayFor(modelItem
=> item.Date)
</td>
<td>
@Html.ActionLink(
"Edit", "Edit", new { id=item.ID }) |
@Html.ActionLink(
"Details", "Details", new { id=item.ID }) |
@Html.ActionLink(
"Delete", "Delete", new { id=item.ID })
</td>
</tr>
}
</table>

运行程序,导航到/Movies/SearchIndex.,在地址后附加一个类似“?searchValue=少年”的查询字符串,会将过滤后的结果显示出来。

如果你改变SearchIndex 方法的签名,使参数标识符为ID,则参数ID将与在Global.asax文件中设置的默认路由匹配{controller}/{action}/{id},即把SearchIndex的形参 searchValue修改为ID。现在你可以传递搜索名称作为路由数据替代查询字符串方式,即采用以下


  • [分享]24点源代码[使用扑克牌显示]

    2010-1-21 14:25:00

    阅读: 358 评论: 7 作者: 雪尘的博客 发表于 2010-01-21 11:41 原文链接 最近做了一个24点的程序,思想是循环生成4个数的排列和11种表达式,再计算结果,如果为2

  • 还是VS2005全角问题

    2007-2-6 20:44:00

    摘要: 这下微软出补丁了,只是微软没有提供下载链接。大家可以…… 阅读全文 南疯 2007-02-06 20:04 发表评论

  • 在SharePoint 2010中使用QuickPart

    2010-8-25 19:46:00

    是的,是的,我知道Visual Studio 2010已经提供了“可视化Web部件”模板,所以在2010版本中,确实没有理由再使用QuickPart之类的工具了(虽然QuickPart仍然支持几个V

  • MOSS2007开发之旅——认识

    2009-10-29 18:34:00

    阅读: 78 评论: 1 作者: known 发表于 2009-10-29 17:23 原文链接 上个月在学习MOSS2007开发,最近有点空闲,正好复习一下MOSS学习的成果,复习的同时

  • Forms authentication fails after installing IIS 7.5

    2009-9-17 3:22:00

    I recently had a customer that just moved from Windows 2008 to Windows 2008 R2 (changing from IIS 7

  • SharePoint Designer 2007 设计工作流三个问题

    2007-4-11 0:04:00

    先看 Kaneboy 的《 SharePoint Designer 2007, 强大的工作流设计器 》。然后,我们针对利用 SPD 2007进行扩展、设计工作流三个常见问题做一些回答。由于开始步

  • Artigos do ASP.NET Dynamic Data no TechEd 2009

    2009-8-27 2:33:00

    Pessoal, algumas pessoas me questionaram os links dos meus artigos sobre o ASP.NET Dynamic Data que

  • 将网站从WSS2.0升级到WSS3.0的心得

    2007-1-22 11:48:00

    最近终于抽出写时间,将网站从WSS2.0升级到WSS3.0,根据升级的过程,将升级的一些经验总结了一下,大家共享。 此文不是一份完整的升级文档,是在我具体实施升级的一些步骤和经验总结

  • Using FullCalendar jQuery component with ASP.NET MVC

    2010-2-4 11:16:00

    I found very good jQuery component called FullCalendar. My special favorites are agenda views becau

  • .NET MVC3 中扩展一个HtmlHelper方法CheckBoxList

    2011-7-7 15:46:00

    MVC中有DropDownList方法,挺好用,可是最常用的需求,一组checkboxlist咋没个类似方法呢?郁闷之余,自己做一个吧,直接上代码,呵呵 public static Mvc