【发布时间】:2016-10-13 09:05:05
【问题描述】:
我正在尝试发布当前查询字符串以执行操作。所以我创建了以下扩展方法:
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;
}
在我看来,我使用的 routvalues 如下:
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" }))
{
}
但奇怪的是,当生成 html 标记时,表单标记操作没有实际的查询字符串值,而是具有对象元数据的字符串版本。
<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">
【问题讨论】:
-
我认为
Ajax.BeginForm中的控制器名称应该在动作名称之后,然后,第三个参数可以是路由值。 -
我也尝试过这种方式,动作、控制器、路由值等仍然是相同的结果
标签: ajax asp.net-mvc routes ajax.beginform