1

私は次の問題を抱えています:

Html.BeginForm() メソッドなど、デフォルトの html ヘルパー メソッドを変更できるかどうかを知りたいです。

何かを追加できるカスタムヘルパーメソッドを作成できることは知っていますが、それらのいくつかにはオーバーロードされた関数がたくさんあります。

次に必要なのは、要素がレンダリングされた「後に」カスタムhtml文字列を追加できることだけです

例えば:

@using(Html.BeginForm("setDate", "DateController", new { DateId = Model.Date.Identifier }, FormMethod.Post, new { id = "setDateForm" })) {
    @* some input here... *@
}

そしてその後

<form></form>

検証スクリプトをレンダリングしたいのですが、jQueryバリデーターとしましょう:

<script>$('#setDateForm').validate();</script>

私はそれを何度もやりたくないので (一度忘れてしまうかもしれません..)、デフォルトの Html ヘルパーを変更するとよいでしょう。

それが不可能な場合は、独自の BeginForm または EndForm ヘルパーのラッパーを作成する必要があるかもしれません:/

4

3 に答える 3

2

非常に基本的な出発点として、次のようなものを使用できます。

namespace YourProject.Helpers
{
    public static class HtmlHelperExtensions
    {
        public static IDisposable CustomBeginForm(this HtmlHelper helper, string html)
        {
            return new MvcFormExtension(helper, html);
        }

        private class MvcFormExtension : IDisposable
        {
            private HtmlHelper helper;
            private MvcForm form;
            private string html;

            public MvcFormExtension(HtmlHelper helper, string html)
            {
                this.helper = helper;
                this.form = this.helper.BeginForm();
                this.html = html;
            }

            public void Dispose()
            {
                form.EndForm();
                helper.ViewContext.Writer.Write(this.html);
            }
        }
    }
}

ビューに名前空間を追加するか、Views フォルダーの web.config ファイルに追加する必要があります。その後、次のように使用できます。

@using (Html.CustomBeginForm("<p>test</p>")) {
    // Additional markup here
}

これはここで私にとってはうまくいきますが、特に に追加のパラメーターを渡したい場合は特に、ニーズに合わせてカスタマイズする必要がありますHtml.BeginForm()

于 2012-08-07T14:36:46.930 に答える
1

これを行う独自の拡張メソッドを作成できる場合があります。Codeplex から BeginForm メソッドのコードを取得します (MVC3 ソース コードはオープン ソースです:))。それに関連する更新を行って、必要に応じてフォームをレンダリングします。

コードは、プロジェクトFormExtensions.csの下のクラスで利用できます。System.Web.MVCBeginForm Overrides から呼び出されている FormHelper メソッドを探します。

于 2012-08-07T14:07:01.810 に答える
0

それは不可能。独自のヘルパーを作成する必要があります。

于 2012-08-07T14:00:47.070 に答える