asp.net-mvc-3 - MVC3 Html.BeginForm-作为RouteValueDictionary传递参数失败

标签 asp.net-mvc-3 html-helper

我有一个多步骤的设置过程,在此过程中,仅当它们相关时,我才希望传递附加到URL的查询字符串参数。

http://localhost:6618/Account/Profile?wizard=true&cats=dogs
@using( Html.BeginForm() )
工作得很好。它产生:<form action="/Account/Profile?setup=true&amp;cats=dogs" method="post">,即它将任何原始查询字符串参数传递到POST操作中,然后在Controller操作中,我可以选择将哪些参数传递给下一步,或者添加到RouteValues和一个RedirectToResult。

但是,我需要为样式分配一个类到表单。

我试过了:
@using( Html.BeginForm( "Profile", "Account", args, FormMethod.Post, new { @class = "mainForm" } ) )
产生:
<form action="/Account/Profile?Count=1&amp;Keys=System.Collections.Generic.Dictionary%602%2BKeyCollection%5BSystem.String%2CSystem.Object%5D&amp;Values=System.Collections.Generic.Dictionary%602%2BValueCollection%5BSystem.String%2CSystem.Object%5D" class="mainForm" method="post">
(args是由过滤器生成的,并且是RouteValueDictionary)。规范http://msdn.microsoft.com/en-us/library/dd505151.aspx指示您可以使用System.Web.Routing.RouteValueDictionary传递参数。

我想要的是<form action="/Account/Profile?setup=true&amp;cats=dogs" class="mainForm" method="post">
我应该提一下,我宁愿不要做类似传递new {key = value}的操作,因为有很多逻辑来确定我将传递给下一步的内容。

有什么建议在这里做什么?

我被这个看似简单的任务所困扰,并且肯定错过了一件非常明显的事情。

最佳答案

args was generated by a filter, and is a RouteValueDictionary



这就是关键。在这种情况下,请确保您使用的是BeginForm方法的correct overload:
@using(Html.BeginForm(
    "Profile", 
    "Account",   
    args, 
    FormMethod.Post, 
    new RouteValueDictionary(new { @class = "mainForm" })
))
{
    ...
}

注意最后一个论点吗?它必须是IDictionary<string, object>才能起作用。

在您的示例中,是this overload被拾取。但是,由于您传递的是routeValues参数的RouteValueDictionary而不是匿名对象,因此它很困惑。

因此,您应该将routeValues和htmlAttributes都作为字典,或者都将其作为匿名对象。

关于asp.net-mvc-3 - MVC3 Html.BeginForm-作为RouteValueDictionary传递参数失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9028288/

相关文章:

c# - MVC3 将模型传递给 Controller ​​ - 接收空值

asp.net-mvc-3 - 如何为 Html.LabelFor<> (MVC Razor) 指定 ID

c# - ASP.NET MVC3 WebGrid 格式 : parameter

asp.net-mvc-3 - 嵌套的 BeginCollectionItem

asp.net-mvc-3 - 使用 .net Web 应用程序实现 Solr

asp.net - JavaScriptSerializer 用于序列化 JavaScript 函数名称

css - 使用 Html.BeginForm 和语义 UI

c# - 为什么我的 MVC ViewModel 成员被我的 ActionResult 参数覆盖了?

asp.net-mvc - 警告 - 项目更新后无法识别 html.helpers

asp.net-mvc - context.SaveChanges 不起作用