是的,我知道,这个问题被提出/回答了34798796873.5次。我查看了所有3个bajillion,我仍然有问题。我在这里缺少什么?
我尝试了几种方法,但没有一种方法可行。以下是我最近的尝试:
<%:Html.DropDownList("Author",
Model.AuthorItems.Select(i =>
new SelectListItem
{
Text = i.Name,
Value = i.Id.ToString(),
Selected = i.Id == Model.Author.Id
}), "無し")%>
<%:Html.DropDownListFor(m => m.Author,
new SelectList(Model.AuthorItems,
"Id",
"Name",
Model.Author),
"無し") %>
我的视图模型非常简单:
public class EditArticleViewModel
{
public AuthorItem Author { get; set; }
public IList<AuthorItem> AuthorItems { get; set; }
public class AuthorItem
{
public int Id { get; set; }
public string Name { get; set; }
}
}
我确保我的行动正常;果然,作者的Id为5,而AuthorItems的Id为5。
我甚至尝试在模型中重写Equals和GetHashCode。
Blahhhhh !! 1
答案 0 :(得分:6)
在您的视图模型中替换:
public AuthorItem Author { get; set; }
带
public int? SelectedAuthorId { get; set; }
并在您的视图中将下拉列表绑定到此SelectedAuthorId
:
<%:Html.DropDownListFor(
m => m.SelectedAuthorId,
new SelectList(Model.AuthorItems, "Id", "Name"),
"無し"
) %>
现在,只要您在控制器操作中提供有效的SelectedAuthorId
值:
model.SelectedAuthorId = 123;
呈现下拉列表的HTML帮助程序将正确地从列表中预先选择具有此给定ID的项目。
这样做的原因是,在下拉列表中,您只能选择单个值(标量类型)而不能选择整个作者(当您提交表单时,HTTP请求中发送的所有内容都是此选定值)。
答案 1 :(得分:0)
DropDownList / DropDownListFor使用的ModelState值。因此,在控制器中设置ViewDataDictionary selectedValue。
public ActionResult Index()
{
var model = new EditArticleViewModel
{
Author = new EditArticleViewModel.AuthorItem() {Id = 3, Name = "CCC"},
AuthorItems = new List<EditArticleViewModel.AuthorItem>()
{
new EditArticleViewModel.AuthorItem() {Id = 1, Name = "AAA"},
new EditArticleViewModel.AuthorItem() {Id = 2, Name = "BBB"},
new EditArticleViewModel.AuthorItem() {Id = 3, Name = "CCC"},
new EditArticleViewModel.AuthorItem() {Id = 4, Name = "DDD"},
}
};
ViewData["Author"] = model.Author.Id;
return View(model);
}
查看代码简单。
<%:Html.DropDownList("Author",
new SelectList(Model.AuthorItems,
"Id",
"Name"), "無し")%>
<%:Html.DropDownListFor(m => m.Author,
new SelectList(Model.AuthorItems,
"Id",
"Name"),
"無し")%>
ViewData键“作者”正在对所选值使用模型状态绑定。
希望得到这个帮助。