2014-01-20 138 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

相关问题