加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc-3 – MVC3 Html.BeginForm – 在RouteValueDictiona

发布时间:2020-12-16 04:19:49 所属栏目:asp.Net 来源:网络整理
导读:我有一个多步骤的设置过程,我想传递追加到URL的查询字符串参数,只要它们是相关的. http://localhost:6618/Account/Profile?wizard=truecats=dogs @using(Html.BeginForm()) 工作得很好.它产生: form action =“/ Account / Profile?setup = true amp; cats
我有一个多步骤的设置过程,我想传递追加到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`2 + KeyCollection [System.String,System.Object]& amp; Values = System.Collections.Generic .Dictionary`2 + ValueCollection [System.String,System.Object]“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”>

我应该提一下,我宁愿不做一些事情,比如传递新的{key = value},因为有相当多的逻辑来确定我将传递给下一步的内容.

关于在这里做什么的任何建议?

我被这个看似简单的任务所困扰,我肯定错过了一些非常明显的东西.

解决方法

args was generated by a filter,and is a RouteValueDictionary

这是关键点.在这种情况下,请确保您使用的是BeginForm方法的correct overload:

@using(Html.BeginForm(
    "Profile","Account",new RouteValueDictionary(new { @class = "mainForm" })
))
{
    ...
}

注意最后一个参数?它必须是IDictionary< string,object>为了这个工作.

在你的例子中,它是this overload被拾取.但是,由于您为routeValues参数传递了RouteValueDictionary而不是匿名对象,因此它会搞砸.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读