ASP.NET MVC DropDownList未设置选定值

时间:2015-09-22 09:44:40

标签: c# asp.net-mvc

考虑以下模型:

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调用了错误的重载?或者我是否构建了错误的选择列表?或者是其他人呢?

1 个答案:

答案 0 :(得分:1)

您应该在model.TagTypeId的{​​{1}}填充TagTypeId

Controller所选值取决于第一个参数值。