次のドメイン エンティティを使用して asp.net アプリケーションを作成しました。
public class Person
{
[Required]
public string name { get; set; }
public string address { get; set; }
public ICollection<Item> ItemsPurchased { get; set;}
}
public class Item
{
[Required]
public string name { get; set; }
public int price { get; set; }
}
ビューモデル付き
public class PersonViewModel
{
public Person Entity { get; set; }
public Item ItemPurchased { get; set; }
}
これで、購入したアイテム(ある場合)とともに個人の詳細を入力するように求めるフォームができました
Html.Label("Person Name")
Html.TextboxFor(model => model.Entity.name)
Html.ValidationMessageFor(model => model.Entity.name)
Html.Label("Item Name")
Html.TextboxFor(model => model.ItemPurchased.name)
Html.ValidationMessageFor(model => model.ItemPurchased.name)
Html.Label("Item Price")
Html.TextboxFor(model => model.ItemPurchased.Price)
Html.ValidationMessageFor(model => model.ItemPurchased.Price)
そして最後に、コントローラーでアイテムを (ユーザーが指定した場合) コレクションに追加します。
if(!this.ModelState.IsValid)
{
//Return the view with validation errors
}
主な問題
アイテム名の値を指定しないと、「名前フィールドが必要です」という検証エラーが表示されます。しかし、このフォームのみの項目オブジェクト属性の検証を削除したいと考えています。どうやってやるの?