当前位置 > 首页 > 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。现在你可以传递搜索名称作为路由数据替代查询字符串方式,即采用以下


  • SQL Server BI Step by Step 1 --- 准备

    2009-2-4 1:07:00

    摘要: SQL Server 2005 和2008提供了很多新的和增强的商务智能功能,包括利用集成服务(SSIS)整合多种数据源;利用分析服务(SSAS)使数据内容更丰富并且建立复杂的商业分析;

  • 博客园的首页

    2009-5-26 12:57:00

    我不知道这个问题有多少人感到头痛:当你发布一篇文章的时候,该不该选择发布到首页呢? 尤其是对于一些你没有把握的内容,例如:我想谈一下F#统计学上产生替代R语言的可能性,但我又不敢肯定我的想法一

  • Silverlight Soliloquy: The Beginning

    2007-8-16 0:04:00

    After reading Jesse Libertys blog series at the Silverlight.net site , I decided to journey along

  • [翻译]托管D3D:使用frame层次

    2009-2-5 21:29:00

    摘要: 托管D3D:使用frame层次这篇文章假设我们的场景是从.x文件中导入。SDK中提供能支持导入此文件格式的类库。原文出处:http://www.jkarlsson.com/Articles/

  • Entity Framework 学习高级篇1—改善EF代码的方法(上)

    2009-6-8 20:46:00

    摘要: 本节,我们将介绍一些改善EF代码的相关方法,如NoTracking,GetObjectByKey, Include等。 --------------------------------

  • 重构CollapsibleSplitter(1)

    2007-4-19 14:36:00

    摘要: RssBandit项目中的CollapsibleSplitter作为Splitter控件的改进版,提供了我梦寐以求的功能:可以像Splitter控件一样分割两个相邻控件,允许在运行时调整他们

  • EmEditor的两个妙用

    2009-5-18 13:23:00

    相信不少程序员喜欢使用Emeditor,我也经常推荐朋友使用这个工具,有时候就会有朋友问我,“这个工具有什么好啊,我现在还体会不到它的好处”,现在我就把平时积累的一些emed

  • Visual Studio Scrum 1.0

    2010-7-26 11:50:00

    [原文发表地址]: Visual Studio Scrum 1.0 [原文发表时间]:20 Jul 2010 12:30 PM 昨天我们发布了Microsoft Visual Stu

  • DNN5修改发件人显示名

    2009-10-20 18:21:00

    摘要: DNN5自带邮件群发功能及注册邮件认证功能,但是我们所收到的邮箱收件人一栏默认都是邮箱地址@前面的部分。如 taoteltaotel@gmail.com.用这个邮箱作为DNN的发件邮箱,我们

  • C++代码覆盖率工具Coverage Validator

    2009-7-12 1:12:00

    市面上的C++代码覆盖率工具大都收费,Coverage Validator也不例外。Coverage Validator应该少有人听过,我也是在 stackoverflow 里听别人介绍的。所以下载