2011-11-06 76 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控制器动作,以接收来自该数据的约定用户。

相关问题