MVC

2012-03-14 4 views
2

で複雑なクラスを検証すると、次のコードを考えてみましょうMVC

@Html.EditorFor(model => model.SourceAccount.Value) 
@Html.EditorFor(model => model.DestinationAccount.Value) 

基本的に、私は、ユーザーソースアカウントを入力する必要があることを言いたいですを入力してください。彼らは先口座を入力してくださいしかし、もしそれが特定のフォーマットに準拠している必要があります。

上記のコードの問題はSourceAccountがnullになることはありませんようSourceAccountに必要なバリデータは常に、有効返すことです。私が達成しようとしているものを実装するための良いアプローチは何でしょうか?

実際には、Valueの設定者は、正規の形式でアカウント番号を再フォーマットするため、図示のものより複雑です。

編集編集中のMVC検証を使用する必要があることに注意してください。残りのプロジェクトは現在使用しています。

答えて

0

たぶん、あなたはFluentValidationを試してみたい、それはあなたが、より複雑なモデルの検証ロジックを追加することができますデータ注釈属性にモデルの検証の代替です。

コードはまだかなり簡潔でわかりやすいです:

[Validator(typeof(PersonValidator))] 
public class Person 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public string Email { get; set; } 
    public int Age { get; set; } 
} 

public class PersonValidator : AbstractValidator<Person> 
{ 
    public PersonValidator() 
    { 
     RuleFor(x => x.Id).NotNull(); 
     RuleFor(x => x.Name).Length(0, 10); 
     RuleFor(x => x.Email).EmailAddress(); 
     RuleFor(x => x.Age).InclusiveBetween(18, 60); 
    } 
} 
+0

感謝。残念ながら、プロジェクトでは現在MVC検証を使用する必要があります。私は今問題を明確にしました。 –

2

Extending the Model Binder for Enhanced Validationを参照してください。
これは、組み込みのMVCの検証と完全に互換性があります。

あなたはできる - もちろん - 検証のための独自のインターフェースを使用してこのソリューションをカスタマイズ。

1

単純なアプローチは、次のようにSourceAccountとDestinationAccount番号については、単純な文字列プロパティを追加することができます提案ニコため

public class MyViewModel 
{ 
    public MyViewModel() 
    { 
    } 

    [Required] 
    [AccountNumber] 
    public string SourceAccountNumber { get; set; } 

    [AccountNumber] 
    public string DestinationAccountNumber { get; set; } 

    public AccountNumber SourceAccount 
    { 
     get 
     { 
      return new AccountNumber 
      { 
       Value = SourceAccountNumber, 
       Format = 0 // Set Format appropriately 
      }; 
     } 
    } 

    public AccountNumber DestinationAccount 
    { 
     get 
     { 
      return new AccountNumber 
      { 
       Value = DestinationAccountNumber, 
       Format = 0 // Set Format appropriately 
      }; 
     } 
    } 
} 
関連する問題