9

ビューが呼び出されたコントローラーに基づいて、いくつかの検証機能を開始できるようにしたい... ViewState などに変数を設定すると、このビューがどのコントローラーから呼び出されたかを知るのに役立ちます。

言い換えれば、特定の変数が設定されている場合に検証が必要になるようにしたい...コードにJqueryを入れたときにMVC2で行う方法は次のとおりです...

HospitalFinNumber: {
                    required: function (element) {
                        debugger;
                        return '@isFlagSet' != 'True'; 
                    },
                    minlength: 6,
                    remote: function () {
                        //debugger;
                        return {
                            url: '@Url.Action("ValidateHosFin", "EditEncounter")',
                            data: { hospitalFin: $('#HospitalFinNumber').val(), encflag: '@encflag' }
                        };
                    }
                }

あなたは私がそこで何をしているのかを見ます。この検証は、特定の変数が設定されている場合にのみ必要です... この場合、変数 isFlagSet... 次に、min Length を設定し、リモート関数を呼び出して、値が一意であることを確認します。

私はすべての場合にこれをしたくありません。

私がこれまでに読んだすべてのことから、目立たない ajax を使用してこれを達成する明確な方法はありませんか? 私は間違っていますか、これを行う方法はありますか?そうでない場合、通常の古い jquery 検証をコードに配置するにはどうすればよいですか?

4

2 に答える 2

11

ASP.NET MVC 3 は、jquery の控えめな検証を使用して、クライアント側の検証を実行します。したがって、カスタムRequiredIf検証属性を記述するか、 Mvc Foolproof Validationで提供されている属性を使用してから、次のようにすることができます。

public class MyViewModel
{
    [RequiredIf("IsFlagSet", true)]
    [Remote("ValidateHosFin", "EditEncounter")]
    [MinLength(6)]
    public string HospitalFinNumber { get; set; }

    public bool IsFlagSet { get; set; }

    public string EncFlag { get; set; }
}

あとは、スクリプトjquery.validate.jsjquery.validate.unobtrusive.jsスクリプトを含めるか、それらを含む ASP.NET MVC 4 の対応するバンドルを使用するだけです。

于 2012-10-11T16:15:03.617 に答える
3

Andy Westが彼のブログで提案した別の解決策は、 Controller の Model Stateから条件付きでフィールドを削除することです

フォームが投稿されたら、モデルの状態からフィールドを削除して、検証されないようにします。

if (Request.IsAuthenticated)
{
    ModelState.Remove("CommenterName");
    ModelState.Remove("Email");
}

それは私のために働いた。

于 2014-08-01T14:52:26.813 に答える