如何使用带有ViewBag的DropdownListFor指定所选值?

时间:2017-07-24 11:31:11

标签: c# asp.net-mvc razor

在我看来,我有以下DropDownListFor:

@Html.DropDownListFor(m => item.BillingStatusID, (SelectList)ViewBag.BillingStatusID, "Select...")

我使用以下控制器,用于编辑和创建:

[HttpGet]
public ActionResult Create()
{
    var week = new Week();
    ApplicationDbContext db = new ApplicationDbContext();
    var timeEntries = from te in db.TimeEntries
                      select te;

    ViewBag.BillingStatusID = new SelectList(db.BillingStatus, "BillingStatusID", "Name", row.BillingStatusID);

    foreach (TimeEntry t in timeEntries)
    {
        week.TimeEntries.Add(t);
    }

    week.TimeEntries.Add(new TimeEntry { TimeEntryID = -1 });

    return View(week);

}

但是,当页面呈现时,它会将所选值显示为"选择..."而不是该项目的结算状态。

所需的结果是页面呈现如下:

enter image description here

但它改为:

enter image description here

如果我将ViewBag更改为:

 ViewBag.BillingStatusID = new SelectList(db.BillingStatus, "BillingStatusID", "Name", 2);

例如,它起作用,DropDownListfor用BillingStatusID = 2的条目填充,但显然这不是所需的行为。如何确保从ViewBag中正确返回索引?

我怀疑我应该以某种方式将变量传递回控制器,但我是MVC的新手,所以不确定这应该如何工作。

1 个答案:

答案 0 :(得分:0)

var data=Model.Select(o=> new SelectListItem{
 Value=o.id.toString(),
 Text=o.value,
 Selected=o.id==yourSelectId?true:false
}).toList();

然后  您的查看页面应该像 -

<option value="@option.value" selected="option.Selected">@option.text</option>