2012-01-17 16 views
5

私はチームに加わる人々に関する情報を収集するフォームのために私のビューモデルを設定しようとしています。フォームにはいくつかのリードアップ情報が含まれていなければならず、最初に2つが必要になる5つの「チームメンバー」(それぞれ名前、電子メール、および電話番号を含む)のリストが含まれている必要があります。私のviewmodelの関連部分は、現在あるオプション複合型の[必須]

Person 1: 
Name: (validation messaage) 
Email: (validation message) 
Phone: (validation message) 

Person 2: 
Name: (validation messaage) 
Email: (validation message) 
Phone: (validation message) 

Person 3: 
Name: 
Email: 
Phone: 

Person 4: 
Name: 
Email: 
Phone: 

Person 5: 
Name: 
Email: 
Phone: 

[Required] 
public TeamMember TeamMember1 { get; set; } 

[Required] 
public TeamMember TeamMember2 { get; set; } 

public TeamMember TeamMember3 { get; set; } 

public TeamMember TeamMember4 { get; set; } 

public TeamMember TeamMember5 { get; set; } 

はとても私の見解で、私は書く:

を私の検証のために私はそれがこのような個々のフィールド、上になりたいです
@Html.EditorFor(model=>model.TeamMember1) 

@Html.EditorFor(model=>model.TeamMember2) 

@Html.EditorFor(model=>model.TeamMember3) 

@Html.EditorFor(model=>model.TeamMember4) 

@Html.EditorFor(model=>model.TeamMember5) 

エディタテンプレートは次のようになります。

@model MyProject.Models.TeamMember 

<div class="editor-label"> 
    @Html.LabelFor(model => model.Name) 
</div> 
<div class="editor-field"> 
    @Html.EditorFor(model => model.Name) 
    @Html.ValidationMessageFor(model => model.Name) 
</div> 

<div class="editor-label"> 
    @Html.LabelFor(model => model.Email) 
</div> 
<div class="editor-field"> 
    @Html.EditorFor(model => model.Email) 
    @Html.ValidationMessageFor(model => model.Email) 
</div> 

<div class="editor-label"> 
    @Html.LabelFor(model => model.Phone) 
</div> 
<div class="editor-field"> 
    @Html.EditorFor(model => model.Phone) 
    @Html.ValidationMessageFor(model => model.Phone) 
</div> 

すごく1つのスレッドに投げてしまって申し訳ありませんが、これを設定するにはどうすればよいと思いますか?私はRequiredAttributeを継承し、[必須]をTeamMemberプロパティに置き換えることを考えましたが、子フィールドの検証メッセージを設定する方法がわかりません。今は空の場合でも必要なチェックを渡しますが、すべてのプロパティが空白であってもオブジェクトがバインドされているため(nullではないため)、私は推測しています。

フィードバックは高く評価されます。

答えて

1

カスタムバリデーターを書くことができます。以下は、他のプロパティの値にアクセスする方法の例です。検証ロジックに応じて、このカスタム 検証属性を使用してTeamMemberまたはプロパティを飾ることができます。私はクラスレベルでお勧めします

protected override ValidationResult IsValid(object value, ValidationContext validationContext) 
{ 
    //Retreive value of Name property 
    var nameProperty = validationContext.ObjectType.GetProperty("Name"); 
    var namePropertyValue = (string)nameProperty.GetValue(validationContext.ObjectInstance, null); 

    var propertyBeingValidatedValue = (string)value; 

    //Validation logic 
    if ((!string.IsNullOrEmpty(propertyBeingValidatedValue)) && (!string.IsNullOrEmpty(namePropertyValue))) 
    { 
     //returning null means everything is good. 
     return null; 
    } 
    //return a message in any other case. 
    return new ValidationResult("Validation Message"); 
} 
関連する問題