Je suis en train d'envoyer à l'action la chaîne de requête actuelle. J'ai donc créé la méthode d'extension ci-dessous:MVC 5 AJax.Beginform Les valeurs de route sont générées à tort
public static RouteValueDictionary ToRouteValues(this NameValueCollection col, Object obj = null)
{
var values = obj != null ? new RouteValueDictionary(obj) : new RouteValueDictionary();
if (col == null) return values;
foreach (string key in col)
{
//values passed in object are already in collection
if (!values.ContainsKey(key)) values[key] = col[key];
}
return values;
}
Et à mon avis, je suis en utilisant les routvalues comme ci-dessous:
using (Ajax.BeginForm(actionName: "Post", routeValues:Request.QueryString.ToRouteValues(), controllerName: "Request", ajaxOptions: new AjaxOptions { HttpMethod = "Post", OnSuccess = "SuccessCallBack", UpdateTargetId = "successDiv", InsertionMode = InsertionMode.InsertAfter }, htmlAttributes: new { @data_toggle = "validator" }))
{
}
Mais étrangement lorsque le balisage HTML est généré l'action de balise form ne pas les valeurs de chaîne de requête réelles, mais à la place une version de chaîne des métadonnées de l'objet.
<form action="/Request/Post?Count=5&Keys=System.Collections.Generic.Dictionary%602%2BKeyCollection%5BSystem.String%2CSystem.Object%5D&Values=System.Collections.Generic.Dictionary%602%2BValueCollection%5BSystem.String%2CSystem.Object%5D" data-ajax="true" data-ajax-method="Post" data-ajax-mode="after" data-ajax-success="SuccessCallBack" data-ajax-update="#successDiv" data-toggle="validator" id="form0" method="post" novalidate="true">
Je pense que dans 'Ajax.BeginForm' le nom du contrôleur doit venir après le nom d'action, puis, le troisième peut être param les valeurs de l'itinéraire. –
J'ai essayé de cette façon également action, contrôleur, routevalues etc toujours le même résultat – Unnie