微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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"} }
)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐