当我在ASP.NET MVC4中使用HTML.BeginForm时,如何向表单添加类定义?

时间:2012-12-30 07:34:37

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-4

我有以下内容:

 @using (Html.BeginForm(new { ReturnUrl = ViewBag.ReturnUrl }))

我试过了:

 @using (Html.BeginForm(new { @class = "form", ReturnUrl = ViewBag.ReturnUrl }))

但是我没有看到添加了“表单”类。我定义它的方式有问题吗?

2 个答案:

答案 0 :(得分:4)

尝试明确定义htmlAttributes参数:

@using (Html.BeginForm(null, null, FormMethod.Post, htmlAttributes: new { @class = "form-class" })) {
}

阅读评论后更新 尝试使用允许您指定路由对象的BeginForm重载之一(我没有测试过,因为我附近没有IDE)

@using (Html.BeginForm("Action", "Controller", new { ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post, htmlAttributes: new { @class = "form-class" })) {
}

答案 1 :(得分:2)

如果您想使用默认表单,那就太痛苦了,只需添加一些属性即可。 Here is the overloaded method signature that accepts attributes。因此,您还需要提供操作名称,控制器名称和表单方法。您拥有的第一个表单是设置RouteValueCollection。

我过去所做的是创造我自己的助手,以规避限制。这是一个简短所有其他参数的示例扩展方法。

using System.Web.Mvc.Html;

namespace MySite.Extensions {
    public static class HtmlFormExtensions {
        public static MvcForm BeginForm(this HtmlHelper htmlHelper, RouteValueDictionary routeValues, IDictionary<string, Object> htmlAttributes) {
            return htmlHelper.BeginForm(null, null, routeValues, FormMethod.Post, htmlAttributes);
        }
    }
}

确保在视图中包含您的命名空间(或通过web.config包含所有视图),然后像这样调用它:

@using (Html.BeginForm(new { ReturnUrl = ViewBag.ReturnUrl }, new { @class = "form" }))