У меня есть модель Product
и хотите добавить соответствующие налоги на продукт с модели Tax
. Один продукт может иметь несколько налогов, поэтому я создал еще одну модель TaxApplied
для хранения отношений.MVC 4 привязка к списку для детского стола
Я добавил ListBox
с MultiSelectList
в представление Создать для Product
, который показывает доступные налоги.
@Html.ListBox("AppliedTaxes", ViewBag.AppliedTaxes as MultiSelectList)
Но я получаю следующее сообщение об ошибке при попытке создать продукт с выбранными налогами. Как мне изменить вид, модель или контроллер, например, добавить налоговые отношения?
The ViewData item that has the key 'AppliedTaxes' is of type 'System.Collections.Generic.List`1[[StoreManager.Models.TaxApplied, StoreManager, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]' but must be of type 'IEnumerable<SelectListItem>'.
Модели Описанная ниже
public class Product
{
public int ID { get; set; }
public string Name { get; set;
public float SalePrice { get; set; }
public List<TaxApplied> AppliedTaxes { get; set; }
}
public class Tax
{
public int ID { get; set; }
[DisplayName("Tax Code")]
public string TaxCode { get; set; }
[DisplayName("Tax Percent")]
public string Value { get; set; }
}
public class TaxApplied
{
public int ID { get; set; }
[ForeignKey("Product")]
public int ProductID { get; set; }
[ForeignKey("Tax")]
public int TaxID { get; set; }
public virtual Product Product { get; set; }
public virtual Tax Tax { get; set; }
}
действия контроллера для Product
создать
//
// GET: /Product/Create
public ActionResult Create()
{
ViewBag.NavProduct = "active";
MultiSelectList taxes = new MultiSelectList(db.Taxes.ToList<Tax>(), "ID", "Name");
ViewBag.AppliedTaxes = taxes;
return View();
}
//
// POST: /Product/Create
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(Product product)
{
ViewBag.NavProduct = "active";
if (ModelState.IsValid)
{
db.Products.Add(product);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(product);
}
Посмотрите на типы переменных для Html.ListBox. Он ожидает List, и вы, кажется, передаете его List . Попробуйте Html.ListBox («AppliedTaxes, новый SelectList ((IList ) ViewBag.Taxes, ...)) –
David
Я изменил контроллер для представления. Форма отображается просто отлично. Это форма submit, которая дает мне ошибка MultiSelectList tax = new MultiSelectList (db.Taxes.ToList(), «ID», «Name»); ViewBag.AppliedTaxes = налоги; –