2011-07-08 42 views
0

我无法理解以下两个Html.BeginForm语法选项的区别是:ASP.Net MVC强类型的表单

@using (Html.BeginForm("SubmitSiteSearch", "Home")) 
{ 
    @Html.LabelFor(x => x.SearchText, "Quick Search:"); 
    @Html.TextBoxFor(x => x.SearchText); 
    @Html.SubmitButton("btn-quick-home-search", "Search"); 
} 

@using (Html.BeginForm<HomeController>(x => x.SubmitSiteSearch(Model), FormMethod.Post)) 
{ 
    @Html.LabelFor(x => x.SearchText, "Quick Search:"); 
    @Html.TextBoxFor(x => x.SearchText, new { id = "quick-home-search" }); 
    @Html.SubmitButton("btn-quick-home-search", "Search"); 
} 

[HttpPost] 
public ActionResult SubmitSiteSearch(HomeViewModel model) 
{ 
    string _siteSearchText = model.SearchText; 
    return View(model); 
} 

第一种形式创建HomeViewModel的一个实例,并设置SEARCHTEXT与文本框价值,而第二种形式没有。

有人可以解释这些差异和/或应该如何使用它们吗?

回答

1

区别在于第二个不是ASP.NET MVC的一部分。例如,您可能正在使用一些第三方库,例如MVC Futures assembly。假设您使用的是默认路由,助手应该生成相同的标记:

<form action="/Home/SubmitSiteSearch" method="post"> 
    <label for="SearchText">Quick Search:</label> 
    <input id="SearchText" name="SearchText" type="text" value="" /> 
    <input id="btn-quick-home-search" name="btn-quick-home-search" type="submit" value="Search" /> 
</form>