2015-09-22 2 views
2

Рассмотрим следующую модель:ASP.NET MVC DropDownList не устанавливая выбранное значение

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? Или я строю список избранного неправильно? Или это что-то еще?

+2

Свойство 'Selected'' SelectListItem 'игнорируется при привязке к свойству в вашей модели. Его значение свойства определяет то, что выбрано. Задайте значение «TagTypeId» для значения, которое соответствует одному из ваших вариантов, и оно будет выбрано. –

ответ

1

Вы должны заполнить model.TagTypeId с выбранными TagTypeId в вашем Controller.

DropDownListFor выбранное значение зависит от значения первого параметра.

+0

Да, именно так. Таким образом, свойство 'Selected'' SelectListItem' ничего не делает при привязке к свойству ... – Bsa0