在IEnumerable <selectlistitem> c#mvc中设置选择值

时间:2017-08-19 07:49:16

标签: c# asp.net-mvc selectlistitem

我有IEnumerable<SelectListItem>

我的ViewModel

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

    public IEnumerable<SelectListItem> StatusList { get; set; }
}

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

StatusClass statusObj = new CRM.StatusClass();

List<SelectListItem> Discountdata = new List<SelectListItem>();
        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<SelectListItem> selectList =
    from s in StatusList
        select new SelectListItem
        {
            Selected = (s.Value == status),
            Text = s.Text,
            Value = s.Value
        };

如果有人知道怎么做,我不知道这些是否正确,请帮助。

提前致谢。

2 个答案:

答案 0 :(得分:0)

绑定到模型属性时,将忽略Selected的{​​{1}}属性。在将模型传递给视图之前,需要在GET方法中设置SelectListItem属性的值

Status

将选择List<SelectListItem> Discountdata = new List<SelectListItem> { 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); 元素中的第二个选项。

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

另请注意,由于IEnumerable<SelectListItem>属性和显示文字的值相同,因此您只需使用

value

并在模型构造函数中

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

答案 1 :(得分:0)

您将<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css"> 属性绑定到下拉列表。因此,可以从数据库中设置值,或者在您的情况下,设置默认值“Issued”,如下所示:

Status