我正在编写一些代码,我希望渲染MVC BeginForm,但也要包含其他HTML。
例如。
@using (Html.BeginMyCustomForm()) {
}
这就吐出来了
<form action="" etc>
PLUS
<input type="hidden" name="my-additional-field-i-always-want">
@Html.ValidationMessageFor(m => m)
这可能吗?
我知道我会考虑某种延伸或最有可能发生的事情
希望这是有道理的,并提前感谢!
答案 0 :(得分:2)
将这些内容包含在BeginForm的扩展中并不是一个好主意。原因是良好的设计要求对象应该做一件事。这被称为单一责任原则。
您现在希望表单对象也创建输入和验证。
相反,请使用MVC模板系统并创建一个默认模板以满足您的需求。您还应该使用Html.HiddenFor而不是使用输入标记,除非有某些特定原因不这样做。
另一个选择是使用MVC Scaffolding生成你想要的东西。
有关编辑器模板的更多信息http://bradwilson.typepad.com/blog/2009/10/aspnet-mvc-2-templates-part-1-introduction.html
答案 1 :(得分:1)
也许你可以使用这样的东西?
public static class FormExtensions
{
public static MvcForm BeginMyCustomForm(this HtmlHelper htmlHelper)
{
var form = htmlHelper.BeginForm();
htmlHelper.ViewContext.Writer.write( .... )
return form;
}
}