Html.BeginForm和HTML属性没有指定Controller和Action

时间:2009-11-23 22:47:58

标签: asp.net-mvc html.beginform

我喜欢

的清洁度
using (Html.BeginForm())

并且讨厌添加HTML属性需要指定控制器,操作和表单方法。

using (Html.BeginForm("Action", "Controller", FormMethod.Post,
  new { id = "inactivate-form" })

有没有办法使用Html.BeginForm并为表单指定HTML属性,而无需手动连接其他所有内容?

3 个答案:

答案 0 :(得分:16)

为什么你不只是使用普通的HTML?

<form id="inactivate-form" method="post" >
</form>

答案 1 :(得分:12)

您可以创建一个自定义扩展程序,添加“Id-ed”表单:

public static MvcForm BeginIdedForm(this HtmlHelper htmlHelper, string id)
{
    return htmlHelper.BeginForm(null, null, FormMethod.Post, new Dictionary<string, object>() { { "id", id } });
}

用法然后变成

using(Html.BeginIdedForm("inactiveate-form")) 

答案 2 :(得分:0)

类似于@nick-olsen's answer,将null用作操作/控制器参数:

@Html.BeginForm(null, null, FormMethod.Post, new Dictionary<string, object>() {{ "id", id }}

BeginForm方法最终调用System.Web.Mvc.RouteValuesHelpers.MergeRouteValues,如果它们RequestContext.RouteData回发到与同一动作/控制器相同的位置,则从null查找动作和控制器名称。表单是从中创建的。