2011-11-06 30 views
2

我建立了一個表格,我需要重新發布。我已經把...我的MVC BeginForm如何知道要發佈哪個url?

@using (Html.BeginForm(){ 
} 

但我沒有看到在使用無參數的方法調用中的點,因爲我看不到的形式是如何知道張貼到哪個網址?我見過一些使用它的例子,他們似乎生成正確的網址,但我真的不知道爲什麼我的一個不?

回答

4

但我沒有看到使用無參數方法調用 的意義,因爲我沒有看到表單如何知道要發送到哪個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方法重載並指定它們。

0

它採用了當前請求路由值,以確定它應提交,並依賴於你有一個GET控制器動作呈現給用戶的響應和POST控制器動作,以接收來自該數據的約定用戶。

相關問題