ASP.NET MVC的一些问题

时间:2016-03-06 19:22:05

标签: c# asp.net-mvc razor

好吧,自从我开始编写ASP.NET MVC以来已经过了几周,我遇到了几个问题,我已经按照这个链接中的教程微软介绍了:

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));

我在这种情况下真正需要的是有人向我解释我的问题,以及这种情况下的流程是如何起作用的,这有点令人困惑 谢谢:))``

2 个答案:

答案 0 :(得分:1)

  1. 此处适用某些惯例。 Html.BeginForm()将生成一个表单标记,其action属性指向/ControllerName/Index,或者只是/ControllerName,假设可以省略Index。 你可以注意到另一个惯例 - return View(movies);。该视图将首先搜索为Views/ControllerName/ActionName.cshtml

  2. 这是LINQ查询语法。它与SQL非常相似。

  3. 再次LINQ在行动。这里我们有一个方法语法的例子。

答案 1 :(得分:0)

  1. 在调用Controller之前,MVC框架解析表单的POST并尝试自动将字段和查询参数映射到方法参数。是的,真的很酷!!!

  2. LinqToSql 。试着找到这个关键词。首先我发现是this one

  3. 实际上这是Linq的表达方式。 s 电影数据集中的一些记录, s.Title.Contains(searchString)将按标题过滤电影。当表达式变得像 s =&gt; true - 该记录已匹配,并将添加到表达式结果中。

  4. 更新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)
    

    我相信它。