私のシナリオ:私のモデルは、0または多数の税金を含む「アイテム」です(モデル「税金」)
「品目」 --> 0 または n を持つ --> 「税金」
「アイテム」、すべての税金(「TaxDic」)、および選択された税金(「税金」)のオブジェクトを持つ「VMItem」という名前のMVCのビューモデルがあります。MVC ページは、このビュー モデル ("ViewItem") にバインドされます。
要件 : MVC にすべての税金のリスト ボックスを表示し、ユーザーがアイテムを作成するときに各アイテムに関連する税金を選択できるようにしたい。
以下は私のコードです、
次のコードを参照してください。税用の ListBox は必須フィールドではありません。しかし、ListBoxでいくつか選択してフォームを送信すると、ListBoxの周りに赤いボックスが表示され、ListBoxで何も選択せずに送信してもエラーはないようです。
次のシナリオを見てください。これを達成するためのより良い方法がある場合は、誰かが私を案内してください。
モデル
public class Item
{
[Display(Name="Item ID")]
public virtual Guid ItemID { get; set; }
[Required]
[Display(Name = "Name")]
public virtual string Name { get; set; }
[Required]
[Display(Name="Price")]
public virtual decimal Price { get; set; }
public virtual IEnumerable<Tax> Taxes { get; set; }
}
モデルを見る
public class VMItem
{
public Item Item { get; set; }
public IEnumerable<Tax> Taxes { get; set; }
public IEnumerable<SelectListItem> TaxDic { get; set; }
}
コントローラークラスでSelectリスト項目を生成する関数
private VMItem GenerateViewModel(Item Item)
{
IEnumerable<Tax> Taxes = TaxServices.FindAll();
IList<SelectListItem> taxDic = new List<SelectListItem>();
// Generating Taxes and taxDic here..
VMItem VmItem = new VMItem
{
Item = Item,
Taxes = Taxes,
TaxDic = taxDic
};
return VmItem;
}
コントローラのアクション
// GET: /Product/Add
public ActionResult Add()
{
return View(GenerateViewModel(new Item()));
}
[HttpPost]
public ActionResult Add(VMItem collection)
{
Item item = new Item();
try
{
if(ModelState.IsValid)
{
item = collection.Item;
var taxes = collection.Taxes;
return View(GenerateViewModel(collection.Item));
}
// else..
}
// catch...
}
ビュー
<% using (Html.BeginForm()) { %>
<!-- more codes for other fields -->
<%: Html.ListBoxFor(model => model.Taxes, Model.TaxDic) %>
<!-- submit button goes below -->
<% } %>