在下面的代码中,尽管model.Title保持正确的选定值,但它没有在ddl中设置,具有id'Title'。
我可以用其他任何方式设置所选值吗? (就像文件准备好了吗?)
<td>
@Html.DropDownListFor(model => model.Title, Model.TitleList, !Model.IsTitleEditable ? (object)new { id = "Title", @disabled = "disabled", @style = "width:250px;" } : (object)new { id = "Title", @style = "width:250px" })
</td>
在我的控制器中,选择列表如下所示:
model.TitleList = new SelectList(GetAllTitles(), "Code","Value");
在这种情况下,当我使用其他重载方法时,如何设置此selectList的selectedValue属性?
答案 0 :(得分:3)
如果,您将model.TitleList创建为IEnumerable&lt; SelectListItem&gt;,您可以在其中设置Text的值为SelectListItems 和的model.Value是其中一个值SelectListItems 然后一切都应该有效。所以:
model.TitleList = GetAllTitles()
.ToList()
.Select(i => new SelectListItem {
Value = i.Id.ToString(),
Text = i.Description });
model.Title = 5;
并在您的视图中:
<td>
@Html.DropDownListFor(model => model.Title,
Model.TitleList,
!Model.IsTitleEditable
? (object)new { @disabled = "disabled", @style = "width:250px;" }
: (object)new { @style = "width:250px" })
</td>
请注意,HtmlAttributes
中不需要id =“Title”,帮助程序会为您创建一个ID。
修改强>
关于Selected
上的SelectListItem
属性存在一些混淆。使用DropDownListFor
时使用 NOT ,仅在DropDownList
中使用。因此,对于DropDownListFor
,您可以将模型的属性设置为您想要选择的值(上面提到的model.Title = 5;
)。
答案 1 :(得分:1)
如果Model.TitleList
是SelectList
,您可以在模型创建期间填充SelectList
时指定所选值。举例说明:
var model = new MyViewModel();
var domainEntity = GetMyDomainEntity(id);
// Create a selectlist using all your titles and specifying the Title value of the item
// you're viewing as the selected item. See parameter options if you're not supplying
// an object as the selected item value
model.TitleList = new SelectList(GetAllTitles(), domainEntity.Title)
然后,您只需在视图中执行Html.DropDownListFor
。
答案 2 :(得分:1)
Personnaly我喜欢做的是拥有一个静态类,如:
public static class SelectLists
{
public static IList<SelectListItem> Titles(int selected = -1)
{
return GetAllTitles()
.Select(x => new SelectListItem {
Value = x.Id.ToString(),
Text = x.Description,
Selected = x.Id == selected
}).ToList();
}
}
然后在我看来:
@Html.DropDownListFor(x => x.Title, SelectLists.Titles(Model.Title), !Model.IsTitleEditable ? (object)new { id = "Title", @disabled = "disabled", @style = "width:250px;" } : (object)new { id = "Title", @style = "width:250px" });
我所有的SelectLists都在那个班级,如果我有太多的选择列表,我会在不同的班级中分开。
我发现它很有用,因为如果你需要在另一个视图/动作中使用相同的下拉列表,则不必重复控制器中的代码。