我使用接受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"} } )