2012-04-05 16 views
1

タイトルが明確であるかどうかはわかりません。私はより良いそれを説明してみましょう:注釈付きモデルのリストの検証

私は2つのモデルがあります:

の1- GuestResponse.cs:

public class GuestResponse 
    { 
     [Required(ErrorMessage="Please enter your name")] 
     public string Name { get; set; } 

     [Required(ErrorMessage = "Please enter your email address")] 
     [RegularExpression(".+\\@.+\\..+", ErrorMessage="Please enter a valid email address")] 
     public string Email { get; set; } 

     [Required(ErrorMessage = "Please enter your phone number")] 
     public string Phone { get; set; } 

     [Required(ErrorMessage = "Please especify wheter you will attend")] 
     public bool? WillAttend { get; set; } 
    } 

2 - CompanyGuestResponse.cs:

public class CompanyGuestResponse 
    { 
     [Required(ErrorMessage = "Please enter your company name")] 
     public string Name { get; set; } 

     [Required(ErrorMessage = "Please enter your company email address")] 
     [RegularExpression(".+\\@.+\\..+", ErrorMessage = "Please enter a valid email address")] 
     public string Email { get; set; } 

     [Required(ErrorMessage = "Please enter your company phone number")] 
     public string Phone { get; set; } 

     public IList<GuestResponse> GuestResponses { get; set;} 
    } 

私が持っているにも強くしますCompanyGuestResponseモデルのタイプ付きビュー。ユーザーがプロパティGuestResponsesの入力を提供できるようにするフォームがあります。

テーブルの塗りつぶしされた行が正しく検証された(つまり、塗りつぶされていない行を検証しようとしない)場合は、フォームを送信でき、少なくとも1行は正しく塗りつぶされていなければなりません。

私は(MVCは単にリストの注釈を無視してGuestResponseクラスに注釈を検証)がない成功を収めてViewModel validation for a Listで説明したように、カスタムアノテーションを作成することによって、これを実行しようとしました:

[EnsureOneElementAttribute(ErrorMessage = "At least a person is required")] 
public IList<GuestResponse> GuestResponses { get; set;} 

結果:

http://postimage.org/image/b2jn7ta69/

答えて

0

私はあなたがモデルのすべてのフィールドではなく検証することを理解しているので、プロパティで[Required]属性を削除してくださいアクションでDその場合はフィールドのいずれかが満たされているかどうかを検証し、私はあなたがこのケースに注釈をドロップすると、手動チェック

を行う言っています何を、他の継続エラーを追加するので、任意のフィールド

に関連付けいけません

関連する問題