2012-03-27 2 views
2

я использовал вариант метода Html.BeginForm(), чтобы прикрепить атрибут HTML в моей форме, как это:Сохраняя RouteData в Html.BeginForm()

@using (Html.BeginForm("actionname", "controllername", FormMethod.Post, new { id = "myform" })) 

К сожалению, это приводит к тому, целевой формы потерять все данные маршрута.

Say мой URL был controller/action?abc=123, а затем с помощью Html.BeginForm() генерирует форму пост объект как controller/action?abc=123 но перегруженная версия (который я использую, чтобы добавить атрибут HTML идентификатор формы), создает объект как 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" })) 
{ 
    //... 
} 
+0

Это выглядит как хорошее решение, и он должен работать, не так ли? Почему вы говорите, что «не уверен, что это лучший способ»? Что не так с этим? –

+0

Он должен работать нормально. Я просто имел в виду, что это лучший способ, как я мог бы подумать, как это сделать, у кого-то еще может быть более легкое решение. – pjumble

 Смежные вопросы

  • Нет связанных вопросов^_^