我的场景:我的模型是“项目”,其中包含 0 个或多个税(模型“税”)
"Item" --> 有 0 或 n --> "Tax"
我有一个名为“VMItem”的 MVC 视图模型,它有一个对象为“Item”、所有税款(“TaxDic”)和选定的税款(“Taxes”)。MVC 页面绑定到此视图模型(“ViewItem”)。
要求:我希望 MVC 显示所有税款的列表框,并允许用户在创建项目时为每个项目选择相关税款。
下面是我的代码,
参考以下代码,用于Taxes的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; }
}
在控制器类中生成选择列表项的函数
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 -->
<% } %>