Но я не вижу смысла в использовании вызова метода без параметров, потому что я не вижу, как форма знает, на какой 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-адрес, который использовался для отображения формы.
Дело в том, что в 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 и указать их.