asp.net-mvc – 具有接受routeValues和htmlAttributes的重载的Begin.Form

前端之家收集整理的这篇文章主要介绍了asp.net-mvc – 具有接受routeValues和htmlAttributes的重载的Begin.Form前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我使用接受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&amp;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"} }
)

猜你在找的asp.Net相关文章