2012-10-11 23 views
9

ビューが呼び出されたコントローラに基づいて、いくつかの検証関数を起動できます。ViewStateなどで変数を設定すると、コントローラはこのビューが呼び出されました。言い換えればasp.net MVC4の条件付きバリデーション

、私は...ここで私は、私はちょうど私のコードの中に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の長さを設定し、値が一意であることを確認するリモート関数を呼び出します。

すべてのケースでこれを行う必要はありません。

これまで読んだことはありませんが、邪魔にならないajaxを使ってこれを達成する明確な方法はありませんか?間違っていますか?これを行う方法はありますか?そうでない場合は、どうすれば正規の古いjquery検証を自分のコードに置くことができますか?

答えて

11

ASP.NET MVC 3は、jqueryの邪魔にならない検証を使用してクライアント側の検証を実行します。だから、その後、Mvc Foolproof Validationで提供1とcustom RequiredIf検証属性を記述するか、使用することができ、次のいずれか

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に対応するバンドルを使用することですしていますそれらを含む。

+0

Hey Darin。私はあなたから聞いてからしばらくしています。しかし、それは行く方法ですね。 – SoftwareSavant

+0

私はここにFoolproofがEntity Frameworkのサポートをまだ持っていないことを追加しなければなりません! db.SaveChanges()で「実装されていない例外」が発生する理由が不思議なら、あなたは私のように感じるかもしれませんが、これはまだコード化されていないことに気付くかもしれません... http://foolproof.codeplex.com/workitem/18457 – CodingYourLife

+1

@Darin Dimitrov MVC 4で動作しませんでした。 RequiredIfValidator – CMMaung

3

blogAndy Westによって提案された別の解決策は、条件付きコントローラーでモデルの状態からフィールドを削除にある:彼らは検証されていないので、

フォームが掲載されて

は、モデル状態からフィールドを削除:

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

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

+1

悪くない。それは2、3年遅れですが、病気はそれを取る。 – SoftwareSavant

+1

これはすべてうまくいきましたが、Javascriptの検証ではフォームが投稿されずにコントローラに到達することはありません。私の状況では、登録フォームの国が「米国」で、Zipを5または5 + 4フォーマットとして検証した場合でした。それがUSAでない場合は、そのフィールドの検証を無視します。これは、よくある解決策が見つからない共通の機能であるようです。コントローラ側のバリデーションのほかに、バリデーションデータの属性を取り除いたり追加したりするジャバスクリプトがあります。これはクールジーです。 – stephenbayer

関連する問題