2012-04-15 12 views
14

を使用して:複数のフィールドの検証、私は次のモデルを持っているリモート検証

public class Customer 
{ 
    public string FirstName {get;set;} 

    public string LastName {get; set;} 

    [Remote("CardExisting", "Validation", AdditionalFields="FirstName,LastName") 
    public string CardNumber {get; set;} 
} 

CardExistingアクションは、姓と名のためにcardNumberプロパティの組み合わせのための既存のレコードがあることを確認します。

ユーザーが最初にカード番号を入力してから名前を入力すると、私はそのカードを検証できないので、返信して名前を入力すると、再度リモート検証する必要があります。プロパティ?

答えて

3

私がこの作業をしている方法は、いくつかのJavaScriptを追加することです。

$("#FirstName").change(function() { 
     $('#CardNumber').removeData('previousValue'); 
     $('#CardNumber').valid(); 
    }); 

したがって、最初の名前が変更されたときに、カード番号から以前の値を消去し、カード番号を再確認します。

20

Jalukaの答えを拡張すると、私はこの追加メソッドを書いて、 "追加のフィールド"を持つそれぞれのリモート検証要素を見つけ、その要素の検証がそのフィールドの1つが変化するたびに発生させます。

// I hate naming things 
function initializeRemotelyValidatingElementsWithAdditionalFields($form) { 
    var remotelyValidatingElements = $form.find("[data-val-remote]"); 

    $.each(remotelyValidatingElements, function (i, element) { 
     var $element = $(element); 

     var additionalFields = $element.attr("data-val-remote-additionalfields"); 

     if (additionalFields.length == 0) return; 

     var rawFieldNames = additionalFields.split(","); 

     var fieldNames = $.map(rawFieldNames, function (fieldName) { return fieldName.replace("*.", ""); }); 

     $.each(fieldNames, function (i, fieldName) { 
      $form.find("#" + fieldName).change(function() { 
       // force re-validation to occur 
       $element.removeData("previousValue"); 
       $element.valid(); 
      }); 
     }); 
    }); 
} 

そうのような関数を呼び出します。あなたは、クライアントスクリプトを作成するために好きではない場合

$(document).ready(function() { 
    initializeRemotelyValidatingElementsWithAdditionalFields($("#myFormId")); 
}); 
+1

W00t !!! 2日前にあなたはこれに答え、私は今、それが必要でした...あなたのコードは素晴らしいです! :)私の場合、私は一緒に働かなければならない2つのドロップダウンを持っています。すなわち、1つは他のフィールドの追加フィールドです。デフォルトのIMHOでなければならない何かのための美しい解決策。 :) –

+0

hehehe私はまた物事を命名するのが好きではありません...しかし、私たちの職業の本性を考えると、それは本質的に一日に複数回必要です! :D –

+0

ありがとうございます、このソリューションはMVC4でも正常に動作しています。 –

2

public class Customer 
    { 
     [Remote("CardExisting", "Validation", AdditionalFields = "CardNumber,LastName")] 
     public string FirstName { get; set; } 
     [Remote("CardExisting", "Validation", AdditionalFields = "FirstName,CardNumber")] 
     public string LastName { get; set; } 
     [Remote("CardExisting", "Validation", AdditionalFields = "FirstName,LastName")] 
     public string CardNumber { get; set; } 
    } 

そして、すべてのフィールドをCardExistingに検証埋めたりない

されています
関連する問題