我使用接受routeValues的Begin.Form的重载
<% RouteValueDictionary routeValues = ViewContext.RouteData.Values; routeValues.Add("TestRoute1","test"); using (Html.BeginForm( "Category","Home",routeValues,FormMethod.Post )) { %> <input type="submit" value="submit" name="subform" /> <% }%>
这很好,并将formtag渲染为:
<form method="post" action="/Home/Category?TestRoute1=test">
我需要更改htmlAttributes,这就是为什么我使用:
<% RouteValueDictionary routeValues = ViewContext.RouteData.Values; routeValues.Add("TestRoute1",FormMethod.Post,new {id="frmCategory"} )) { %> <input type="submit" value="submit" name="subform" /> <% }%>
结果是完全错误的:
<form method="post" id="frmTyreBySizeCar" action="/de/TyreSize.mvc/List?Count=12&Keys=System.Collections.Generic.Dictionary%....
我可以在Formhelper的来源中看到原因是什么。
有2个重载适用于我给定的参数:
public static MvcForm BeginForm(this HtmlHelper htmlHelper,string actionName,string controllerName,object routeValues,FormMethod method,object htmlAttributes) public static MvcForm BeginForm(this HtmlHelper htmlHelper,RouteValueDictionary routeValues,IDictionary<string,object> htmlAttributes)
它出错了,因为第一种方法被拿起来。如果我不提供htmlAttributes,那么没有重载,对象作为参数,everyrthing按预期方式工作。
我需要一个接受RouteValues和htmlAttributes Dictionary的解决方法。我看到有重载有一个额外的routeName,但这不是我想要的。
编辑:eugene显示正确的使用BeginForm。
Html.BeginForm("Category",new RouteValueDictionary { {"TestRoute1","test"} },new Dictionary<string,object> { {"id","frmCategory"} }
)
解决方法
使用(RouteValues和HtmlAttributes都是对象):
Html.BeginForm("Category",new { TestRoute1 = "test" },new { id = "frmCategory" } )
或(RouteValues和HtmlAttributes都是字典):
Html.BeginForm("Category","frmCategory"} } )
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。