Подтвердить что ты не робот

Html.BeginForm и HTML-атрибуты без указания контроллера и действия

Мне нравится чистота

using (Html.BeginForm())

И ненавижу, что добавление атрибутов HTML требует указания метода контроллера, действия и формы.

using (Html.BeginForm("Action", "Controller", FormMethod.Post,
  new { id = "inactivate-form" })

Есть ли способ использовать Html.BeginForm и указать атрибуты HTML для формы без ручной проводки всего остального?

4b9b3361

Ответ 1

Почему вы не просто используете простой html?

<form id="inactivate-form" method="post" >
</form>

Ответ 2

Вы можете создать настраиваемое расширение, которое добавит форму Id-ed:

public static MvcForm BeginIdedForm(this HtmlHelper htmlHelper, string id)
{
    return htmlHelper.BeginForm(null, null, FormMethod.Post, new Dictionary<string, object>() { { "id", id } });
}

Использование тогда просто становится

using(Html.BeginIdedForm("inactiveate-form")) 

Ответ 3

Аналогично ответу @nick-olsen используйте null для параметров action/controller:

@Html.BeginForm(null, null, FormMethod.Post, new Dictionary<string, object>() {{ "id", id }}

BeginForm метод в конечном счете вызывает System.Web.Mvc.RouteValuesHelpers.MergeRouteValues, который ищет имена действий и управления из RequestContext.RouteData, если они null проводка обратно в тот же действии/контроллер, как форма была создана с.