这有点减少,但基本上我有一个看起来像这样的模型:
public class PersonCreateEditViewModel
{
public string Title { get; set; }
public IEnumerable<SelectListItem> Titles { get; set; }
}
在我的编辑页面上,我想在DropDownList中显示此人的当前标题,以便我们更改其标题。该代码如下所示:
@Html.DropDownListFor(model => model.Title, new SelectList(Model.Titles, "Value", "Text", Model.Title))
我通过检索一串字符串来填充它的行为:
IEnumerable<SelectList> titles = somelistoftitles.Select(
c => new SelectListItem
{
Value = c,
Text = c
};
var viewModel = new PersonCreateEditViewModel()
{
Title = model.Title,
Titles = sometitles
};
return View(viewModel);
这将使用值填充DropDownList,但不会选择此人的当前标题。所以,我在这里做错了。查看底层的html,我发现没有为与该人的标题对应的选项设置selected
属性。我想指定Model.Title
,因为第三个参数会选择它。
想法?
更新
我将Selected
属性的设置添加为下面建议的qntmfred,并且将列表中的正确设置为true,但<option>
没有selected
它的属性。
解决
所以,这很微妙。我恰好有一个名为“Title”的ViewBag
条目 - 类似这样:
@{
ViewBag.Title = "Edit Person"
}
这显然导致选择不起作用,因为我的模型也有“标题”属性。我通过重命名属性解决了这个问题。
答案 0 :(得分:4)
<强>解决强>
正如我在问题的最后写的那样,这不是一件明显的事情。我恰好有一个名为“Title”的ViewBag
条目 - 类似这样:
@{
ViewBag.Title = "Edit Person"
}
这显然导致选择不起作用,因为我的模型也有“标题”属性。我通过重命名属性解决了这个问题。
今天早上浪费了太多时间来解决这个问题。
经验教训。
答案 1 :(得分:1)
您需要在Selected
SelectListItem
属性
IEnumerable<SelectList> titles = somelistoftitles.Select(
c => new SelectListItem
{
Value = c,
Text = c,
Selected = (c.Equals(model.Title))
};