MVC3中使用Html.BeginForm()附加HTML的方法

4
我正在编写一些代码,希望渲染一个MVC BeginForm,但同时也包括额外的HTML。
例如:
@using (Html.BeginMyCustomForm()) {

}

这将输出

<form action="" etc>

PLUS

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

@Html.ValidationMessageFor(m => m)

这个可行吗?
我知道我很可能需要查看某种扩展或其他内容。
希望这样说得清楚,谢谢!


http://stackoverflow.com/editing-help - SLaks
2个回答

2
在BeginForm的扩展中包含这些东西并不是一个好主意。原因是良好的设计要求对象只做一件事情,这被称为单一职责原则。
现在你想让你的表单对象也创建输入和验证。
相反,使用MVC模板系统并创建一个默认模板来满足你的需求。除非有特定的原因,否则你应该使用Html.HiddenFor而不是使用input标签。
另一个选择是使用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

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

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

太棒了!我成功渲染了一些文本。我会继续尝试,之前不知道有ViewContext.Writer这个东西。如果可以的话,我会给你点赞的 :-) - Adam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接