C# 如何使用带有ViewBag的DropdownListFor指定所选值?
在我看来,我有以下下拉列表:C# 如何使用带有ViewBag的DropdownListFor指定所选值?,c#,asp.net-mvc,razor,C#,Asp.net Mvc,Razor,在我看来,我有以下下拉列表: @Html.DropDownListFor(m => item.BillingStatusID, (SelectList)ViewBag.BillingStatusID, "Select...") 我正在使用以下控制器,用于编辑和创建: [HttpGet] public ActionResult Create() { var week = new Week(); ApplicationDbContext db = new Applicatio
@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新手,所以不确定这应该如何工作
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>
@option.text
您能详细介绍一下吗?不确定这与我上面的问题有何联系?你的问题标记为重复,你可以查看答案。但在我的情况下,我使用像选择@foreach(ViewBag.Model中的SelectListItem选项){@option.text}@SohelRana,这是错误的代码,永远不会提供真正的双向模型绑定(如果存在,则使用ModelState
设置值),也不会提供客户端验证)所有这些都意味着将选择该选项(其存在决定是否选择某个选项的属性),只会选择最后一个选项。还要注意,添加第四个参数或SelectList
构造函数('row.BillingStatusID')是没有意义的,因为它被DropDownListFor()
忽略。在内部,该方法构建一个新的IEnumerable
,并根据绑定刚刚实现的m=>item.BillingStatusID的属性值设置Selected
属性,这表明您可能在一个foreach
循环中执行此操作,而该循环无论如何都不会工作-请参阅foreach
循环将不起作用,并解释如何对集合使用DropDownListFor()