2

asp.net mvc3で目立たない検証を機能させるには、次の@Html.BeginForm()非常に優れた投稿で説明されているhtmlヘルパーを使用する必要があります:http://bradwilson.typepad.com/blog/2010/10/mvc3-unobtrusive-validation.html

ヘルパーを使用しないと、目立たない検証はトリガーされません。私はそれを確認することができました。

@Html.BeginForm()フォームの送信時に目立たない検証をトリガーできるようにするために、ヘルパーは何をするのか説明していただけますか?

また、手動でそれを行う方法を説明してもらえますか(を呼び出しずに目立たない検証を許可するを読んでください@Html.BeginForm())?

$("#myform").valid()を使用して目立たない検証を呼び出すことができることは知っていますが、ヘルパーの背後にある魔法とそれを再現する方法を知りたい ことに注意してください。

4

2 に答える 2

2

あなたの見解にこれを書いてください、そしてそれはうまくいくでしょう:

 ViewContext.FormContext = ViewContext.FormContext ?? new FormContext();

コードが(同じビューの)@ Html.Beginform内にある場合、html要素の検証属性はメタデータから取得されます。それ以外の場合は取得されません。

于 2012-12-20T10:51:40.737 に答える
2

を呼び出すとBeginFormhttp://j.mp/WrmAykを参照FormExtensionsclass)、新しいMvcFormオブジェクトが作成されます。

このクラスのコンストラクター(MvcFormクラスについてはhttp://j.mp/Wrml6FFormContextを参照)を見ると、新しいオブジェクトが作成されていることがわかります_viewContext.FormContext = new FormContext();

入力、textarea、またはselectがHTMLヘルパーを使用してレンダリングされる場合、以下が呼び出されますtagBuilder.MergeAttributes(htmlHelper.GetUnobtrusiveValidationAttributes(name, metadata));。これは、モデルメタデータからの検証属性のレンダリングを処理します。

このGetUnobtrusiveValidationAttributesメソッド( HtmlHelperクラスについてはhttp://j.mp/Wrn4oaを参照)は、属性をレンダリングする前に、FormContextがnullであるかどうかを確認します。

FormContext formContext = ViewContext.GetFormContextForClientValidation();
if (formContext == null)
{
    return results;
}

これが、フォーム内にいない限り検証属性がレンダリングされない理由です。FormContext@karaxunaが提案するように、「偽物」を作成することでこれを回避できます。

于 2012-12-20T12:46:38.237 に答える