Сохранение RouteData в Html.BeginForm()
Я использовал вариант метода Html.BeginForm(), чтобы прикрепить атрибут html к моей форме, например:
@using (Html.BeginForm("actionname", "controllername", FormMethod.Post, new { id = "myform" }))
К сожалению, это приводит к тому, что цель формы теряет все данные маршрута.
Скажи, мой URL был controller/action?abc=123
затем с помощью Html.BeginForm()
генерирует форму пост цели как controller/action?abc=123
но перегруженная версия (которую я использую для добавления атрибута html id в форму) генерирует цель как controller/action
(что на самом деле понятно, так как я сам определяю маршрут, но это не решает мою задачу).
Есть ли вариант Html.BeginForm()
что позволило бы мне сохранить старые значения маршрута и одновременно добавить атрибуты html в форму?
1 ответ
Насколько я вижу, только версия без параметров BeginForm
использует текущий полный URL.
public static MvcForm BeginForm(this HtmlHelper htmlHelper) {
// generates <form action="{current url}" method="post">...</form>
string formAction = htmlHelper.ViewContext.HttpContext.Request.RawUrl;
return FormHelper(htmlHelper, formAction, FormMethod.Post, new RouteValueDictionary());
}
Я не уверен, что это лучший способ, но вы можете написать специальный помощник для формы, чтобы включить QueryString
ценности:
public static class MyFormExtensions
{
public static MvcForm MyBeginForm(this HtmlHelper htmlHelper, object htmlAttributes)
{
var rvd = new RouteValueDictionary(htmlHelper.ViewContext.RouteData.Values);
var queryString = htmlHelper.ViewContext.HttpContext.Request.QueryString;
foreach (string key in queryString.AllKeys) rvd.Add(key, queryString[key]);
return htmlHelper.BeginForm(null, null, rvd, FormMethod.Post, HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes));
}
}
@using (Html.MyBeginForm(new { id = "myform" }))
{
//...
}