在我看来,我有以下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);
}
但是,当页面呈现时,它会将所选值显示为"选择..."而不是该项目的结算状态。
所需的结果是页面呈现如下:
但它改为:
如果我将ViewBag更改为:
ViewBag.BillingStatusID = new SelectList(db.BillingStatus, "BillingStatusID", "Name", 2);
例如,它起作用,DropDownListfor用BillingStatusID = 2的条目填充,但显然这不是所需的行为。如何确保从ViewBag中正确返回索引?
我怀疑我应该以某种方式将变量传递回控制器,但我是MVC的新手,所以不确定这应该如何工作。
答案 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>