我试图使用LINQ查询的结果来填充MVC 5应用程序中的SelectList.
LINQ查询返回客户ID.
LINQ查询返回客户ID.
模型
public partial class Pricelist { public int CustomerID { get; set; } public int SelectedCustomer { get; set; } public Pricelist(int customerID,int selectedCustomer) { } }
视图
@Html.DropDownList("custList")
控制器(1)
var query = ((from s in db.Pricelists select s.CustId).Distinct()).ToList(); int i = 1; List<Pricelist> CustomerList = new List<Pricelist>(); foreach (var c in query) { int cust = c; Pricelist p = new Pricelist(i,cust); CustomerList.Add(p); i++; } SelectList custList = new SelectList(CustomerList); ViewBag.custList = custList; return View();
返回使用Model类名填充的下拉列表
(如果我试图在foreach中返回i和cust .ToString(),我会得到一个例外.)
我试过这个,因为下面的Controller方法生成了不同的CustomerID列表,但是在POST时返回NULL(我想因为SelectList中没有指定Value)
public ActionResult Create() { var query = (from s in db.Pricelists select s.CustId).Distinct(); SelectList CustomerList = new SelectList(query); ViewBag.custList = CustomerList; return View(); }
指向我出错的地方,以及如何继续前行.
解决方法
我认为使用ViewBag来填充mvc中的下拉列表并不是那么好.
你应该改变你的模型以获得SelectedListItem列表并从PriceList列表中填充它,所以它应该如下所示:
你应该改变你的模型以获得SelectedListItem列表并从PriceList列表中填充它,所以它应该如下所示:
public class Model { public int CustomerID { get; set; } public int SelectedCustomer { get; set; } public IList<Pricelist> PriceList{get;set;} public IList<SelectListItem> PriceListSelectListItem{get;set;} { get { var list = (from item in PriceList select new SelectListItem() { Text = item.customerID.ToString(CultureInfo.InvariantCulture),Value = item.selectedCustomer.ToString(CultureInfo.InvariantCulture) }).ToList(); return list; } set{} } }
现在你可以做这样的事情了:
@Html.DropDownListFor(c=>c.CustomerID,Model.PriceList)
尝试使用这样的下拉列表,这看起来比在视图中使用ViewBag更专业.
控制器:
var query = ((from s in db.Pricelists select s.CustId).Distinct()).ToList(); int i = 1; List<Pricelist> CustomerList = new List<Pricelist>(); foreach (var c in query) { int cust = c; Pricelist p = new Pricelist(i,cust); CustomerList.Add(p); i++; } model.PriceList=result of your query return View("ViewName",model);