j'utilise une surcharge de Begin.Form qui accepte routeValues Begin.Form avec surcharge qui accepte routeValues et htmlAttributes
<%
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 bien et rend le formtag comme:
<form method="post" action="/Home/Category?TestRoute1=test">
Je dois changement htmlAttributes, c'est pourquoi je:
<%
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&Keys=System.Collections.Generic.Dictionary%....
Je peux voir dans la source du Formhelper quelle est la raison.
Il y a 2 qui s'appliquent à des surcharges mes 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)
Il va mal, parce que la première méthode est ramassé. Si je ne fournis pas htmlAttributes, il n'y a pas de surcharge avec objet en paramètre et tout 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 nom de route supplémentaire, mais ce n'est pas ce que je veux.
EDIT: eugene a montré le bon usage de BeginForm.
Html.BeginForm("Category", "Home",
new RouteValueDictionary { {"TestRoute1", "test"} },
FormMethod.Post,
new Dictionary<string, object> { {"id", "frmCategory"} }
)
Merci EUGENE, cela fonctionne. Mais doit être nouveau Dictionnaire {{"id", "frmCategory"} –
Merci, fixe :) –
@ eu-ge-ne Pouvez-vous vérifier ma question, il y a quelques similitudes: http: // stackoverflow.com/questions/12142356/send-an-object-as-a-parameter-to-post-action-in-asp-net-mvc3 – Saeid