我使用了一个接受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", "test");

        using (Html.BeginForm(
            "Category",
            "Home",
              routeValues,
              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, string actionName, string controllerName, RouteValueDictionary routeValues, FormMethod method, IDictionary<string, object> htmlAttributes)


出错了,因为选择了第一种方法。如果我不提供htmlAttributes,则不会将对象作为参数进行重载,并且一切正常。

我需要一个接受RouteValues和htmlAttributes字典的解决方法。我看到有一个额外的routeName的重载,但这不是我想要的。

编辑:尤金展示了BeginForm的正确用法。

Html.BeginForm("Category", "Home",
new RouteValueDictionary { {"TestRoute1", "test"} },
FormMethod.Post,
new Dictionary<string, object> { {"id", "frmCategory"} }


最佳答案

使用(RouteValues和HtmlAttributes都是对象):

Html.BeginForm("Category", "Home",
    new { TestRoute1 = "test" },
    FormMethod.Post,
    new { id = "frmCategory" }
)


或(RouteValues和HtmlAttributes都是字典):

Html.BeginForm("Category", "Home",
    new RouteValueDictionary { {"TestRoute1", "test"} },
    FormMethod.Post,
    new Dictionary<string, object> { {"id", "frmCategory"} }
)

关于asp.net-mvc - 具有过载的Begin.Form接受routeValues和htmlAttributes,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1038386/

10-10 07:53