在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 };
我不知道如果有人知道如何做到这些是正确的方法,请帮忙。
提前致谢。
绑定到模型属性时,将忽略SelectListItem
的Selected
属性。 在将模型传递给视图之前,需要在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"