为什么保存表单内搜索文本框中的值

时间:2011-11-18 11:45:44

标签: asp.net-mvc-3 search razor

我正在尝试在Asp.net MVC Razor中实现搜索功能。我发现奇怪的是搜索texbox中的值的检索(虽然我想要这个,但想知道发生在幕后的事情)。

以下是HTML代码: -

                @using (Html.BeginForm("Search", "Home", FormMethod.Get))
                {
                    @Html.TextBox("query")
                    <input type="submit" value="Submit" />
                }

以下是控制器代码: -

    public ActionResult Search(string query, int? page)
    {
        int pageIndex = page ?? 1;
        ViewBag.query = query;
        PagedList.IPagedList<Product> PagedProducts = dbStore.Products.Where(p => p.Name.Contains(query)).ToList().ToPagedList(pageIndex, PageSize);
        return View(PagedProducts);
    }

注意: - 上述HTML代码位于共享的_Layout.cshtml即主页文件

2 个答案:

答案 0 :(得分:2)

答案是Model Binding,它是ASP.NET MVC的内置默认功能。每次向服务器发出请求时,Model Binder都会查找与控件中对象属性或操作方法参数匹配的表单输入值。

有关更详细的说明,请查看:http://dotnetslackers.com/articles/aspnet/Understanding-ASP-NET-MVC-Model-Binding.aspx

答案 1 :(得分:1)

关于ModelState的MSDN文章至少可以说是简短的,但ModelState负责此事。

处理@Html.BeginForm()后,控件将由当前模型ModelState的值填充(如果适用)。

您可以通过在操作方法中调用ModelState.Clear()来覆盖此行为(并强制清除文本框)。