我正在尝试在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即主页文件
答案 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()
来覆盖此行为(并强制清除文本框)。