无法使用 Html.BeginForm 将属性分配给表单

Cannot assign attributes to form using Html.BeginForm

我有一个以 Html.BeginForm() 辅助方法开始的表单:

 @using (Html.BeginForm(
       null,null, new { @id = "MaintenanceForm", @class = "datatable", @nonvalidate="nonvalidate" }
    ))

表单呈现为:

<form action="(controller's name)/(current action's name)/MaintenanceForm?class=datatable" method="post">

未分配 id、class 和 nonvalidate 等属性。我也不想要默认的 Http 方法。我能做什么?

您当前的代码与 BeginForm 方法的以下重载匹配

public static MvcForm BeginForm(
    this HtmlHelper htmlHelper,
    string actionName,
    string controllerName,
    object routeValues
)

此处的第三个参数是路由值的对象。这些将作为查询字符串键值添加到表单的 action 属性值中。这就是您看到那些大 url 作为 action 属性值的原因。

如果要指定 html 属性(Id、class 等),请使用此重载,它有第四个参数,它采用 html属性。第三个参数是FormMethod。

public static MvcForm BeginForm(
    this HtmlHelper htmlHelper,
    string actionName,
    string controllerName,
    FormMethod method,
    object htmlAttributes
)

这应该有效。

@using (Html.BeginForm("Create", "Post",FormMethod.Post, 
       new { @id = "MaintenanceForm", @class = "datatable", @nonvalidate = "nonvalidate" }))
{

}

CreatePost 替换为您的操作方法名称和控制器名称。