我建立了一个表格,我需要重新发布。我已经把...我的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
控制器动作,以接收来自该数据的约定用户。