0

コレクションアイテムを表すコントロール(入力ボックス)を保持する、強く型付けされたビューがあります。したがって、例として、従業員の詳細を追加するためのビューの場合を考えてみましょう。その中に、部門名を入力するための入力フィールドの変数セットがあります。これらの入力フィールドは、クライアント側で動的に追加されます。

これら2つのエンティティのクラス構造は次のとおりです。

public class Employee
{

public int EmployeeID{get;set;}
public string Name {get;set; }
public IList<Department> DepartmentList{get;set;}


}


public class Deparment { 
[Required(ErrorMessage="This is a required Field")]
public string Name {get;set; }
public int ID { get;set; }

}

部門名の入力は動的に生成され、投稿後にモデルのバインドを実現する方法で名前が設定されます

<input type='text' class='input-choice' id='txtChoice0' name='Department[0].Name' />

今私の質問は、これに検証をどのように適用すべきかということです。Microsoft Validationは、mvcClientValidationMetadata内に検証をプッシュしません。これは、ビューの読み込み時にフレームワークがモデルのバインドを認識しないためだと思います。

何か案は ??

4

1 に答える 1

1

あなたが求めているのは、ドロップダウンリストの値を「必須」属性で検証する方法だと思います。Employee モデルにいくつかの変更を加える必要があります。

まず、ドロップダウンから選択した部門コードを保存するため、'DepartmentCode' プロパティが必要です。

次に、DepartmentListを次のように持つことができますIEnumerable<SelectListItem>

Employee モデルは次のようになります

public class Employee
{    
    public int EmployeeID{get;set;}
    public string Name {get;set; }
    [Required(ErrorMessage = "Please select a department")]
    public string DepartmentCode { get; set; }
    public IEnumerable<SelectListItem> DepartmentList{get;set;
}

このようにDepartmentListを取得できます

public IEnumerable<SelectListItem> DepartmentList 
{
    get
    {
        //Your code to return the departmentlist as a SelectedListItem collection
        return Department
            .GetAllDepartments()
            .Select(department => new SelectListItem 
            { 
                Text = department.Name, 
                Value = department.ID.ToString() 
            })
            .ToList();
    }
}

やっと視界に入った

<%: Html.DropDownListFor(model => model.DepartmentCode, Model.DepartmentList, "select")%>
<%: Html.ValidationMessageFor(model => model.DepartmentCode)%>

部門を選択せず​​に提出しようとすると、検証する必要があります

于 2012-05-03T23:13:47.430 に答える