0

強く型付けされたビューがあり、コレクション項目を表すコントロール(入力ボックス)を保持しています。たとえば、従業員の詳細を追加するビューの場合、部門名を入力するための可変の入力フィールドセットがあります。これらの入力フィールドは、クライアント側で動的に追加されます。ここでAsp.net MVC 2のコレクション項目にバリデーションを適用する方法

は、これら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の内部で検証をプッシュしません。なぜなら、ビューロード時にフレームワークがモデルバインディングを認識しないと仮定しているからです。

+0

もっと正確に検証したいものはありますか?また、サーバー側またはクライアント側の検証について話しているか、両方が必要ですか? –

+0

そして、クラスのプロパティにAttributeタグを含めることができますか?[必須(ErrorMessage = "X is required。")] – MikeTWebb

+0

@MikeTWebb:既にそこにあります –

答えて

0

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

最初に、 'DepartmentCode'プロパティが必要です。ドロップダウンから選択したDepartmentコードを保存する必要があります。

次にあなたがIEnumerable<SelectListItem>

としてDepartmentListを持つことができますので、あなたの従業員のモデルは

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; 
} 

のようになります。あなたは、ビュー

でようやくこの

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(); 
    } 
} 

ようDepartmentListを得ることができます

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

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

+0

回答ありがとうございますが、これは役に立たないと思いますが、私は部門コードが必要ありません。必要なのは、従業員オブジェクトに添付された部門オブジェクトのリストです。 UI側では、私が言ったように、従業員の詳細を入力するフォームと部門名を入力するための最大5つのテキストボックスがあります。部署はどこからでも自動集計されません。また、この従業員部門は単なる例です。私の場合は、子どもと親オブジェクトの両方が、アンケートの質問とその回答のように同時に追加されます。 –

+0

OK。したがって、基本的にあなたの例に基づいて5つの部門フィールドがありますが、少なくとも1つの部門に価値があるように検証する必要があります。私はあなたがコレクションにRequired属性を置くだけでこれを直接達成できるとは思わない。カスタム検証のオプションを検討する必要があります。このディスカッションはあなたを助けるかもしれません(それはMVC3ですが、MVC2に似ているはずです)。 http:// stackoverflow。com/questions/5816313/mvc3-unobtrusive-validation-group-of-inputs/5817958#5817958 –

+0

閉じるが、十分に近くない場合、フォームには「部門を追加」というボタン呼び出しがあります。これにより、ユーザーは最大5部門まで追加することができます。一度追加すると、1または2,3,4,5を追加するかどうかにかかわらず、すべてのユーザーに対して検証が有効になります。 –

関連する問題