我建立了一個表格,我需要重新發布。我已經把...我的MVC BeginForm如何知道要發佈哪個url?
@using (Html.BeginForm(){
}
但我沒有看到在使用無參數的方法調用中的點,因爲我看不到的形式是如何知道張貼到哪個網址?我見過一些使用它的例子,他們似乎生成正確的網址,但我真的不知道爲什麼我的一個不?
我建立了一個表格,我需要重新發布。我已經把...我的MVC BeginForm如何知道要發佈哪個url?
@using (Html.BeginForm(){
}
但我沒有看到在使用無參數的方法調用中的點,因爲我看不到的形式是如何知道張貼到哪個網址?我見過一些使用它的例子,他們似乎生成正確的網址,但我真的不知道爲什麼我的一個不?
但我沒有看到使用無參數方法調用 的意義,因爲我沒有看到表單如何知道要發送到哪個URL?
它發佈到客戶端瀏覽器當前指向的url。這是它是如何實現的:
public static MvcForm BeginForm(this HtmlHelper htmlHelper)
{
string rawUrl = htmlHelper.ViewContext.HttpContext.Request.RawUrl;
return htmlHelper.FormHelper(rawUrl, FormMethod.Post, new RouteValueDictionary());
}
正如你所看到的,它只是使用與用於呈現表單的url相同的url。
的一點是,在一個RESTful ASP.NET MVC應用程序,你通常有2個動作名稱相同,但通過不同的動詞可用可用:
public class HomeController: Controller
{
public ActionResult Index()
{
MyViewModel model = ...
return View(model);
}
[HttpPost]
public ActionResult Index(MyViewModel model)
{
...
}
}
第一個動作是用於呈現形式和第二個動作用於處理表單的提交。因此,當您在視圖中使用Html.BeginForm
而沒有任何參數時,第一個動作將不再對視圖中的任何動作或控制器進行硬編碼。您依賴於標準的ASP.NET MVC約定。這是正確的做法。
當然,如果你想發佈到一些不同的動作或控制器,你將不得不使用適當的BeginForm方法重載並指定它們。
它採用了當前請求路由值,以確定它應提交,並依賴於你有一個GET
控制器動作呈現給用戶的響應和POST
控制器動作,以接收來自該數據的約定用戶。