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 の拡張機能に含めるのは得策ではありません。その理由は、優れた設計では、オブジェクトが 1 つのことを行う必要があるからです。これを単一責任原則といいます。

フォーム オブジェクトで入力と検証も作成する必要があります。

代わりに、MVC テンプレート システムを使用して、必要に応じて使用する既定のテンプレートを作成します。また、特別な理由がない限り、input タグを使用するのではなく、Html.HiddenFor を使用する必要があります。

もう 1 つのオプションは、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 に答える