我已经建立了一个我需要重新发布的表单。我已经把...
@using (Html.BeginForm(){
}
但我没有看到使用无参数方法调用的重点,因为我没有看到表单如何知道要发布到哪个URL?我见过一些使用它的例子,他们似乎生成了正确的网址,但我真的不知道为什么我的那个没有?
答案 0 :(得分: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方法的正确重载并指定它们。
答案 1 :(得分:0)
它使用当前请求路由值来确定应将其提交到何处,并依赖于您具有GET
控制器操作以向用户和POST
控制器呈现响应的约定从用户接收数据的行动。