2011-07-08 44 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>