考虑以下模型:
public class TagType
{
public int Id { get; set; }
public string Description { get; set; }
}
public class Tag
{
public int Id { get; set; }
public string Description { get; set; }
public TagType TagType { get; set; }
public DropDownListViewModel TagTypeViewModel { get; set; }
public int TagTypeId { get; set; }
}
我在控制器中有以下操作:
public ActionResult Edit(int id)
{
// Load from database
IEnumerable<TagType> tagTypes = TagTypeDal.GetAll().ToList();
Tag tag = TagDal.Get(id);
tag.TagTypeViewModel = new DropDownListViewModel();
tag.TagTypeViewModel.Items = new List<SelectListItem>();
tag.TagTypeViewModel.Items.Add(new SelectListItem { Text = "None", Value = "-1" });
tag.TagTypeViewModel.Items.AddRange(tagTypes
.Select(tt => new SelectListItem
{
Text = tt.Description,
Value = tt.Id.ToString(),
Selected = tt.Id == tag.TagType.Id
}).ToList());
return View(tag);
}
选择列表有一个元素Selected=true
,它不是第一个元素。
在我的Edit.cshtml上,我有:
@model Models.Tag
@Html.DropDownListFor(model => model.TagTypeId,
@Model.TagTypeViewModel.Items,
new { @class = "form-control" })
我的问题是生成的下拉列表从不选择具有Selected=true
的元素,它始终显示第一个元素。
我是否为DropDownListFor
调用了错误的重载?或者我是否构建了错误的选择列表?或者是其他人呢?
答案 0 :(得分:1)
您应该在model.TagTypeId
的{{1}}填充TagTypeId
。
Controller
所选值取决于第一个参数值。