2014-01-20 73 views
0

我在我看來,有一個DropDownListForDropDownListFor - 爲什麼選定的元素總是第一個?

@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爲第4 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

用於查看第二個文檔片斷是正確的:

@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

相關問題