添加一个查找方法和查找视图

在这一节我们将实现一个SearchIndex响应方法,允许您按流派或名字查找电影。

它利用网址/Movies/SearchIndex。请求将展示一个HTML页面,它包含为了查

找电影由用户输入的input控件。当用户提交页面时,响应方法将获得由用户post

的查找条件并依据条件查询数据库。最终的效果图如下所示 。

展示查找页面

首先,在MoviesController类中添加一个SearchIndex响应方法。这个方法返回一个包含HTML

页面的视图。代码如下:

public ActionResult SearchIndex(string searchString) {var movies = from m in db.Moviesselect m;if (!String.IsNullOrEmpty(searchString)) {movies = movies.Where(s => s.Title.Contains(searchString));}return View(movies);
}

SearchIndex方法的第一行创建了以下的LINQ查询来查询电影:

var movies = from m in db.Moviesselect m;

查询在这里定义,但却没有执行!(译注:LINQ在需要执行的时候才会执行。

一般来说,真正需要使用数据时才真正执行)

如果参数searchString不是空字符串,电影的查询被修改为过滤查找字符串,

使用如下代码:

if (!String.IsNullOrEmpty(searchString)) {movies = movies.Where(s => s.Title.Contains(searchString));
}

当定义或通过Where、OrderBy方法修改时,LINQ查询并没有执行。相反,

查询的执行被延迟,这意味着LINQ表达式一直被延迟到它真实的值被遍历

(循环)或被ToList方法调用。在SearchIndex方法中,LINQ查询在SearchIndex

视图中执行。了解更多关于延迟查询执行,参见Query Execution。

现在您可以实现SearchIndex视图展示给用户。右键SearchIndex方法内部并单击

“Add View”,在“Add View”对话框中,指明您将传递Movie对象给视图模板

作为它的模型类。在架构模板(Scaffold template)列表中,选择List,单击Add

当您单击Add按钮时,视图模板Views\Movies\SearchIndex.cshtml被创建。

因为您在架构模板(Scaffold template)选择List,Visual Studio自动在视
图中生成了一些内容。架构创建了一个HTML窗体。它检查Movie类并为每个

类属性创建代码来输出<label>元素。下面展示了自动生成的创建视图:

@model IEnumerable<MvcMovie.Models.Movie>@{
    ViewBag.Title = "SearchIndex";
}<h2>SearchIndex</h2><p>@Html.ActionLink("Create New", "Create")
</p>
<table><tr><th>Title</th><th>ReleaseDate</th><th>Genre</th><th>Price</th><th></th></tr>@foreach (var item in Model) {<tr><td>@Html.DisplayFor(modelItem => item.Title)</td><td>@Html.DisplayFor(modelItem => item.ReleaseDate)</td><td>@Html.DisplayFor(modelItem => item.Genre)</td><td>@Html.DisplayFor(modelItem => item.Price)</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。给URL追加一个查询字符串,比如

?searchString=ghost。筛选后的电影显示如下。

如果您改变SearchIndex方法的签名,改为一个名叫id的参数,id参数会匹配默认路由{id}占位符

集合(在Global.asax文件中)。

{controller}/{action}/{id}

修改后的SearchIndex方法看起来如下所示:

public ActionResult SearchIndex(string id) {string searchString = id;var movies = from m in db.Moviesselect m;if (!String.IsNullOrEmpty(searchString)) {movies = movies.Where(s => s.Title.Contains(searchString));}return View(movies);
}

您现在可以使用路由数据(一个URL片段)来传递查找标题,而不是作为一个查询字符串了。

(译注:注意和上一个张图比较,看看URL发生了什么变化!)

但是,您不能期望用户每次查找电影都来修改URL!所以现在您需要添加UI来帮助他们筛选电影。

如果您改变SearchIndex的签名来测试如何传递路由绑定参数ID,把它改回原样。(译注:刚才

只是为了说明默认路由的作用)

public ActionResult SearchIndex(string searchString) {var movies = from m in db.Moviesselect m;if (!String.IsNullOrEmpty(searchString)) {movies = movies.Where(s => s.Title.Contains(searchString));}return View(movies);
}

打开文件Views\Movies\SearchIndex.cshtml

并在后@Html.ActionLink("Create New", "Create"),添加如下代码:

@using (Html.BeginForm()) {   <p>Title: @Html.TextBox("SearchString")<input type="submit" value="Filter" /></p>
}

下面的例子展示了Views\Movies\SearchIndex.cshtml文件的一部分被添加的过滤

标记。

@model IEnumerable<MvcMovie.Models.Movie>
@{ ViewBag.Title = "SearchIndex";
}
<h2>SearchIndex</h2>
<p>@Html.ActionLink("Create New", "Create")@using (Html.BeginForm()) {    <p>Title: @Html.TextBox("SearchString")<br /><input type="submit" value="Filter" /></p> }
</p>

Html.BeginForm助手创建了一个开放的<form>标签。Html.BeginForm助手

使得当用户单击Filter按钮时页面提交form给自己。

运行程序并试着查找电影。

未完待续。。。

原文网址:http://www.asp.net/mvc/tutorials/getting-started-with-mvc3-part6-cs

转载于:https://www.cnblogs.com/BingoLee/archive/2011/06/28/2092060.html

Asp.net MVC3.0 入门指南 7.1 展示查找页面相关推荐

  1. Asp.net MVC3.0 入门指南 6 审视编辑方法和视图

    审视编辑方法和视图 在这一节中,您将审视movie控制器生成的响应方法和视图.然后您将添加 一个自定义搜索页面. 运行程序并通过在URL追加/Moives浏览movie控制器.把鼠标悬停在Edit 链 ...

  2. [MVC.NET] Asp.Net MVC3 简单入门第一季

    转自:http://www.cnblogs.com/fly_dragon/archive/2011/10/12/2208042.html 初识Asp.Net MVC2.0 初识Asp.Net MVC2 ...

  3. ASP.NET MVC3 快速入门

    第一节 概述    (2011-02-23 20:57:18)  转载 标签: web应用程序 分类: ASP.NETMVC3 1.1  本教程的学习内容     在本教程中,你将学会如下内容: •  ...

  4. ASP.NET 2.0入门与提高系列课程(视频课程讲师:徐栋)

    ASP.NET 2.0入门与提高系列课程(1):揭开Orcas神秘的面纱.zip 讲座内容:做为Visual Studio和.NET Framework下一个版本的"Orcas"吊 ...

  5. Asp.Net MVC3.0网站统计登录认证的在线人数

    前言 对于一个网站来说,统计在线人数是一个很重要的工作.平时也发现很多的网站论坛等都有在线人数的显示.对于一个网站如果在线人数很多,用户看到了这么个数字也是很了不起的事情.由于之前对于这个知识点只是知 ...

  6. asp.net mvc3.0安装失败之终极解决方案

    安装失败截图 原因分析 因为vs10先安装了sp1补丁,然后安装的mvc3.0,某些文件被sp1补丁更改,导致"VS10-KB2483190-x86.exe"安装不了,造成安装失败 ...

  7. ASP.NET MVC 5 入门指南汇总

    原文:ASP.NET MVC 5 入门指南汇总 经过前一段时间的翻译和编辑,我们陆续发出12篇ASP.NET MVC 5的入门文章.其中大部分翻译自ASP.NET MVC 5 官方教程,由于本系列文章 ...

  8. Asp.Net Mvc3.0(MEF依赖注入实例)

    前言 在http://www.cnblogs.com/aehyok/p/3386650.html前面一节主要是对MEF进行简单的介绍.本节主要来介绍如何在Asp.Net Mvc3.0中使用MEF. 准 ...

  9. Win7 IIS7 ASP.NET MVC3.0 部署问题

    Win7 IIS7 ASP.NET MVC3.0 部署问题 1.应用程序池采用经典模式,framework4.0.可能存在权限问题,解决办法:在高级设置的标识设为LocalSystem. 一般mvc都 ...

最新文章

  1. YML(2)yml 语法
  2. stringstream用法总结
  3. 请列举你了解的分布式锁_终于搞懂分布式锁是什么了!
  4. Ti的DM368系列芯片的所有PDF资料汇总
  5. Postman入门到精通01
  6. Linux内核 eBPF基础:Tracepoint原理源码分析
  7. c语言标准库assert,C 标准库 - assert.h
  8. windows 查看_解决 Windows 照片查看器无法显示图片问题
  9. zookeeper服务端
  10. 翻译: 顶级人工智能会议 CVPR NeurIPS AAAI 等
  11. 奇安信 测试开发岗位 面经 2019.9.11(秋招)
  12. 数据库之order by
  13. 【转】Matlab坐标修改及旋转
  14. storm源码分析研究(十三)
  15. 炼数成金数据分析课程---13、回归分析
  16. jq 移动端网页分享功能_js实现QQ、微信、新浪微博分享功能
  17. oppo手机怎么查计算机记录,oppo怎样查通话记录(oppo手机怎么查以前的通话记录)...
  18. 2021-06-09
  19. NodeJS 之 fs 模块(文件操作)
  20. Bonobo Git Server 后台服务安装 详细教程

热门文章

  1. [EntLib]微软企业库5.0 学习之路——第七步、Cryptographer加密模块简单分析、自定义加密接口及使用—上篇...
  2. jQuery回调函数
  3. SimpleAdapter理解
  4. 计算机组成原理课程内容,计算机组成原理课程教学大纲.doc.doc
  5. oracle的日志分析工具,oracle日志分析工具LogMiner使用(实战)
  6. PhotoGun中文版
  7. 如何把纯真ip数据库导入到MySQL数据表中
  8. FCKeditor 2.4.3精简优化带代码高亮(Dphighlighter)插件版
  9. svn服务安装和配置 以及搭配Eclips插件使用(总结)
  10. 【转】Linux root修改密码失败