Commencer.Forme avec la surcharge qui accepte routeValues et htmlAttributes

- Je utiliser une surcharge de Commencer.Forme qui accepte routeValues

    <% 
        RouteValueDictionary routeValues = ViewContext.RouteData.Values;
        routeValues.Add("TestRoute1", "test");

        using (Html.BeginForm(
            "Category", 
            "Home",
              routeValues,
              FormMethod.Post

      ))
       { %>  

        <input type="submit" value="submit" name="subform" />
<% }%>

Cela fonctionne agréable et rend le formtag:

<form method="post" action="/Home/Category?TestRoute1=test">

J'ai besoin de changer htmlAttributes, c'est pourquoi j'ai utilisé:

    <% 
        RouteValueDictionary routeValues = ViewContext.RouteData.Values;
        routeValues.Add("TestRoute1", "test");

        using (Html.BeginForm(
            "Category", 
            "Home",
              routeValues,
              FormMethod.Post,
              new {id="frmCategory"}

      ))
       { %>  

        <input type="submit" value="submit" name="subform" />
<% }%>

Le résultat est complètement faux:

<form method="post" id="frmTyreBySizeCar" action="/de/TyreSize.mvc/List?Count=12&amp;Keys=System.Collections.Generic.Dictionary%....

Je peux voir dans le source de la Formhelper quelle est la raison.

Il y a 2 surcharges qui s'appliquent à mon paramètres donnés:

public static MvcForm BeginForm(this HtmlHelper htmlHelper, string actionName, string controllerName, object routeValues, FormMethod method, object htmlAttributes)

public static MvcForm BeginForm(this HtmlHelper htmlHelper, string actionName, string controllerName, RouteValueDictionary routeValues, FormMethod method, IDictionary<string, object> htmlAttributes)

Ça ne va pas, parce que la première méthode est ramassé. Si je n'ai pas d'alimentation htmlAttributes, alors il n'y a pas de surcharge de l'objet en tant que paramètre et everyrthing fonctionne comme prévu.

J'ai besoin d'une solution de contournement qui accepte un Dictionnaire de RouteValues et htmlAttributes. Je vois qu'il y a des surcharges qui ont un supplément de routeName, mais ce n'est pas ce que je veux.

EDIT: eugene a montré le droit d'utilisation de BeginForm.

Html.BeginForm("Category", "Home",
new RouteValueDictionary { {"TestRoute1", "test"} },
FormMethod.Post,
new Dictionary<string, object> { {"id", "frmCategory"} }

)

OriginalL'auteur Mathias F | 2009-06-24