http://www.asp.net/mvc/overview/getting-started/introduction/adding-search
有三件我无法理解的事情
1 - 在关于ASP.NET中的搜索的示例中,我无法获得如何将searchString从视图中的表单传递到控制器
public ActionResult Index(string searchString) //this searchString in the controller
{
var movies = from m in db.Movies
select m;
if (!String.IsNullOrEmpty(searchString))
{
movies = movies.Where(s => s.Title.Contains(searchString));
}
return View(movies);
}
Razor语法
@using (Html.BeginForm()){
<p> Title: @Html.TextBox("SearchString") <br />
<input type="submit" value="Filter" /></p>
}
视图将字符串发送到控制器???
2 - var movies =来自db.Movies中的m 选择m;
这个奇怪的语法是什么,我在哪里可以学习它,是什么意思?我学习了sql语法,它与它有点不同:S。
3-在这种情况下lambda表达式如何工作???
例如:movies = movies.Where(s =&gt; s.Title.Contains(searchString));
我在这种情况下真正需要的是有人向我解释我的问题,以及这种情况下的流程是如何起作用的,这有点令人困惑 谢谢:))``
答案 0 :(得分:1)
此处适用某些惯例。 Html.BeginForm()
将生成一个表单标记,其action属性指向/ControllerName/Index
,或者只是/ControllerName
,假设可以省略Index。
你可以注意到另一个惯例 - return View(movies);
。该视图将首先搜索为Views/ControllerName/ActionName.cshtml
。
这是LINQ的查询语法。它与SQL非常相似。
答案 1 :(得分:0)
在调用Controller之前,MVC框架解析表单的POST并尝试自动将字段和查询参数映射到方法参数。是的,真的很酷!!!
LinqToSql 。试着找到这个关键词。首先我发现是this one
实际上这是Linq的表达方式。 s 是电影数据集中的一些记录, s.Title.Contains(searchString)将按标题过滤电影。当表达式变得像 s =&gt; true - 该记录已匹配,并将添加到表达式结果中。
更新01:
我建议使用
@Html.TextBoxFor(model => model.SearchString)
作为
的替代方案@Html.TextBox("SearchString")
因为它更多的是关于我们使用的MVC的所有内容。通常,Contoller将使用填充的SearchString属性传递给View一些模型(实际上它只是简单的类)。在您的视图的顶部,您将有类似的东西:
@model SomeNamespace.SomeModelClass
它描述了您的视图模型。
在控制器中,您将拥有:
var model = new SomeModelClass(){SearchString = "something"};
return View("Index", model)
我相信它。