在IEnumerable中设置选择值 c#mvc

我有一个IEnumerable

我的ViewModel

 public class StatusClass { public string Status { get; set; } public IEnumerable StatusList { get; set; } } 

我从控制器中将值设置为StatusList

 StatusClass statusObj = new CRM.StatusClass(); List Discountdata = new List(); Discountdata.Add(new SelectListItem() { Value = "All", Text = "All" }); Discountdata.Add(new SelectListItem() { Value = "Draft", Text = "Draft" }); Discountdata.Add(new SelectListItem() { Value = "Issued", Text = "Issued" }); Discountdata.Add(new SelectListItem() { Value = "Partial", Text = "Partially Received" }); Discountdata.Add(new SelectListItem() { Value = "Received", Text = "Received" }); Discountdata.Add(new SelectListItem() { Value = "PAID", Text = "Paid" }); Discountdata.Add(new SelectListItem() { Value = "Billed", Text = "Billed" }); statusObj.StatusList = new SelectList(Discountdata, "Value", "Text"); 

这工作正常,我的HTML是这样的:

 @Html.DropDownListFor(model => model.Status, Model.StatusList) 

我想要的是,我需要在创建列表时从控制器设置所选值。

假设我有一个这样的字符串:

 string newwStatus = "Issued"; 

如何在SelectListItem中将其设置为选中状态。

我试过这个,但它不适用于我的情况:

 foreach(var item in StatusList) { if(item.value == status) { item.Selected = true; } } 

并尝试这个:

 IEnumerable selectList = from s in StatusList select new SelectListItem { Selected = (s.Value == status), Text = s.Text, Value = s.Value }; 

我不知道如果有人知道如何做到这些是正确的方法,请帮忙。

提前致谢。

绑定到模型属性时,将忽略SelectListItemSelected属性。 在将模型传递给视图之前,需要在GET方法中设置Status属性的值

 List Discountdata = new List { new SelectListItem() { Value = "All", Text = "All" }, new SelectListItem() { Value = "Draft", Text = "Draft" }, new SelectListItem() { Value = "Issued", Text = "Issued" }, .... }; StatusClass model = new CRM.StatusClass { StatusList = Discountdata, Status = "Issued" }; return View(model); 

并且将选择元素中的第二个选项。

请注意, Discountdata已经是IEnumerable并且使用new SelectList(Discountdata, "Value", "Text")来创建相同的IEnumerable是不必要的额外开销。

另请注意,由于value属性和显示文本的value相同,因此您可以使用

 List Discountdata = new List{ "All", "Draft", "Issued", ... }; 

并在模型构造函数中

 StatusList = new SelectList(Discountdata), 

您将Status属性绑定到下拉列表。 因此,要么从数据库中设置值,要么在您的情况下,设置默认值“Issued”,如下所示:

 statusObj.Status = "Issued"