1

我想将 a 传递RouteValueDictionary给我的 aspx,以便我可以将它用作Ajax.BeginForm方法的参数。我像这样加载它:

 RouteValues = new System.Web.Routing.RouteValueDictionary();

 RouteValues.Add("FindingId", thisFinding.Id);
 RouteValues.Add("ReportId", thisFinding.ReportSection.ReportId);

然后毫无问题地将其添加到我的模型中。当我将它作为BeginForm方法的参数时,它会将操作呈现为:

/SolidWaste/Finding/LoadSection?Count=3&Keys=System.Collections.Generic.Dictionary%602%2BKeyCollection%5BSystem.String%2CSystem.Object%5D&Values=System.Collections.Generic.Dictionary%602%2BValueCollection%5BSystem.String%2CSystem.Object%5D

这是aspx代码:

(Ajax.BeginForm(Model.FormModel.Action,
    Model.FormModel.Controller, 
    Model.FormModel.RouteValues,
new AjaxOptions {
    HttpMethod = "Post",
    InsertionMode = System.Web.Mvc.Ajax.InsertionMode.Replace,
    UpdateTargetId = "WindowContent",
}, new { id = FormId })) { %>
<input name="submit" type="submit" class="button" value="" style="float: right;"/>
<%  } //End Form %>

这是代表 Model.FormModel 的视图模型

    public class FormViewModel {

    public string Action { get; set; }

    public string Controller { get; set; }

    public string Method { get; set; }

    public RouteValueDictionary RouteValues { get; set; }
}

知道为什么它没有将 RouteValueDictionary 序列化为操作的正确 URL 吗?我想在这里使用一个对象,而不是手动构建 RouteValuesnew { field = vale }

4

1 回答 1

3

啊,你使用了错误的重载。这是正常的。ASP.NET MVC 团队确实把这个 API 搞得一团糟。你必须小心你正在调用哪种方法。这是您需要的重载

<% using (Ajax.BeginForm(
    Model.FormModel.Action,                                // actionName
    Model.FormModel.Controller,                            // controllerName
    Model.FormModel.RouteValues,                           // routeValues
    new AjaxOptions {                                      // ajaxOptions
        HttpMethod = "Post",
        InsertionMode = System.Web.Mvc.Ajax.InsertionMode.Replace,
        UpdateTargetId = "WindowContent",
    }, 
    new Dictionary<string, object> { { "id", FormId } })    // htmlAttributes
) { %>
    <input name="submit" type="submit" class="button" value="" style="float: right;"/>
<% } %>

注意正确的过载?你正在使用一个作为匿名对象的对象routeValueshtmlAttributes除了你是Model.FormModel.RouteValues作为一个传递的,RouteValueDictionary这基本上会破坏你的超载。

F12将光标悬停在 上时点击BeginForm,如果您足够幸运并且 Intellisense 在 Razor 视图中对您工作正常(这种情况很少发生),您将被重定向到您实际调用的方法并意识到您的错误。

于 2011-11-28T23:48:04.410 回答