4

我正在编写一些我想呈现 MVC BeginForm 但还包含其他 HTML 的代码。

例如。

@using (Html.BeginMyCustomForm()) {

}

这吐出来

<form action="" etc>

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

@Html.ValidationMessageFor(m => m)

这可能吗?
我知道我会考虑某种扩展或最有可能的东西。
希望这是有道理的,并提前感谢!

4

2 回答 2

2

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

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

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

另一种选择是使用 MVC 脚手架来生成你想要的。

更多关于编辑器模板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/

于 2012-09-27T01:56:56.830 回答
1

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

public static class FormExtensions
{
    public static MvcForm BeginMyCustomForm(this HtmlHelper htmlHelper)
    {
        var form = htmlHelper.BeginForm();
        htmlHelper.ViewContext.Writer.write( .... )
        return form;
    }
}
于 2012-09-27T01:50:58.087 回答