2014-01-20 2 views
0

У меня есть DropDownListFor на мой взгляд:DropDownListFor - почему выбранный элемент всегда первый?

@model UserProfileViewModel 

@Html.DropDownListFor(x => x.PreferredLangID, 
    new SelectList(Model.PreferredLanguages, 
     "LanguageID", 
     "DisplayName", 
     Model.PreferredLang)) 

контроллер действия:

public ActionResult EditProfile() 
{ 
    List<Language> languages = Code.LanguageLogic.GetAllLanguages(); 
    UserProfile profile = Code.ProfileLogic.GetUserProfile(); 
    var viewModel = new UserProfileViewModel 
    { 
     UserID = profile.UserID, 
     PreferredLanguages = languages, 
     PreferredLang = profile.PreferredLang 
    }; 
    return View(viewModel); 
} 

Я подумал, что если бы я дал Model.PreferredLang в четвёртую paramater in SelectList's contructor, то этот элемент будет выбран в раскрывающемся меню, когда страница загружается , Но выбранный элемент всегда является первым в списке.

Модель:

public class UserProfileViewModel 
{ 
    public Guid UserID { get; set; } 
    public Language PreferredLang { get; set; } 
    public int PreferredLangID { get; set; } 
    public IEnumerable<Language> PreferredLanguages { get; set; } 
    //... 
} 
+1

Является '' profile.PreferredLang' в Language' или строка представляет 'Language.LanguageID '? – tweray

+0

Я обновил вопрос – Tschareck

ответ

2

Я не знаю деталей типа, поэтому я не могу сказать наверняка, но я предполагаю, что вам может понадобиться:

@Html.DropDownListFor(x => x.PreferredLangID, 
    new SelectList(Model.PreferredLanguages, 
     "LanguageID", 
     "DisplayName", 
     Model.PreferredLang.PreferredLangId)) 

ETA:

Или, с добавлением:

@Html.DropDownListFor(x => x.PreferredLangID, 
    new SelectList(Model.PreferredLanguages, 
     "LanguageID", 
     "DisplayName", 
     Model.PreferredLangId)) 
0

Второй пропущено для View был правильным:

@Html.DropDownListFor(x => x.PreferredLangID, 
new SelectList(Model.PreferredLanguages, 
    "LanguageID", 
    "DisplayName", 
    Model.PreferredLangId)) 

Но контроллер также что-то отсутствует. Model.PreferredLangID необходимо также установить:

var viewModel = new UserProfileViewModel 
{ 
    UserID = profile.UserID, 
    IsAdministrator = profile.IsAdministrator, 
    PreferredLanguages = languages, 
    PreferredLangID = profile.PreferredLang.LanguageID 
}; 

Я не уверен, почему это не работает с

new SelectList(Model.PreferredLanguages, 
    "LanguageID", 
    "DisplayName", 
    Model.PreferredLang.LanguageID)) 
+0

В вашем случае 'Model.PreferredLang' вообще не установлен в вашей модели viewmodel. – tweray

Смежные вопросы