Как мой MVC BeginForm узнает, по какой ссылке публиковать? - PullRequest
2 голосов
/ 06 ноября 2011

Я создал форму, на которую мне нужно отправить сообщение.Я поставил ...

@using (Html.BeginForm(){
}

Но я не вижу смысла в использовании вызова метода без параметров, потому что я не вижу, как форма знает, какой URL отправлять?Я видел какой-то пример, использующий его, и они, кажется, генерируют правильный URL, но я действительно не знаю, почему мой не?

Ответы [ 2 ]

4 голосов
/ 06 ноября 2011

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

0 голосов
/ 06 ноября 2011

Он использует текущие значения маршрута запроса, чтобы определить, куда он должен быть отправлен, и полагается на соглашение, согласно которому у вас есть действие контроллера GET для отправки ответа пользователю и действие контроллера POST для полученияданные от пользователя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...