带有附加HTML的MVC3 Html.BeginForm()

时间:2012-09-27 01:40:14

标签: asp.net-mvc-3 mvcextensions

我正在编写一些代码,我希望渲染MVC BeginForm,但也要包含其他HTML。

例如。

@using (Html.BeginMyCustomForm()) {

}

这就吐出来了

<form action="" etc>

PLUS

<input type="hidden" name="my-additional-field-i-always-want">

@Html.ValidationMessageFor(m => m)

这可能吗?
我知道我会考虑某种延伸或最有可能发生的事情 希望这是有道理的,并提前感谢!

2 个答案:

答案 0 :(得分:2)

将这些内容包含在BeginForm的扩展中并不是一个好主意。原因是良好的设计要求对象应该做一件事。这被称为单一责任原则。

您现在希望表单对象也创建输入和验证。

相反,请使用MVC模板系统并创建一个默认模板以满足您的需求。您还应该使用Html.HiddenFor而不是使用输入标记,除非有某些特定原因不这样做。

另一个选择是使用MVC Scaffolding生成你想要的东西。

有关编辑器模板的更多信息http://bradwilson.typepad.com/blog/2009/10/aspnet-mvc-2-templates-part-1-introduction.html

有关脚手架的更多信息http://blog.stevensanderson.com/2011/01/13/scaffold-your-aspnet-mvc-3-project-with-the-mvcscaffolding-package/

答案 1 :(得分:1)

也许你可以使用这样的东西?

public static class FormExtensions
{
    public static MvcForm BeginMyCustomForm(this HtmlHelper htmlHelper)
    {
        var form = htmlHelper.BeginForm();
        htmlHelper.ViewContext.Writer.write( .... )
        return form;
    }
}