2012-07-28 86 views
0

我正在構建我的第一個管理片段的MVC(3)應用程序。用相關實體填充列表框

很明顯,我有一個編輯頁面的代碼片斷,它有一種編程語言(0. *到0.1)。

現在我的問題是,我如何構建一個帶有所有編程語言的列表框,以在我的編輯頁面上顯示一個片段?

我想我可以創建一個ViewModel並通過手動查詢它們並將它們作爲列表傳遞給它,但是我有一種感覺,構建MVC的人對此有一個更加整潔的解決方案?我有Apress的「Pro MVC 3」和「Pro Entity Framework」,但似乎無法找到答案。

當我嘗試:

@Html.EditorFor(model => model.Language or model.Language.Name) 

我得到的錯誤。

在此先感謝,任何幫助表示讚賞!

回答

0

這是我做類似的情況: 1)創建編輯語言視圖模型

public class LanguagesModel 
{ 

    public IEnumerable<int> SelectedLanguageIds { get; set; } 
    public MultiSelectList languages { get; set; } 
} 

2)填充控制器型號:)

public ActionResult Index() 
    { 
     List<Language> languages = _languageService.GetLanguages();//however you get the languages from your datasource 
     var temp = new MultiSelectList(
          languages.Select(l => new { Value = l.LanguageId.ToString(), Text = l.Name }), 
          "Value", 
          "Text"); 

     LanguagesModel model = new LanguagesModel(); 
     model.languages = temp; 



     return View(model); 
    } 

3創建查看使用DropDownListFor幫手:

@model LanguagesModel 

@using (Html.BeginForm(Html.BeginForm("Index", "Home", FormMethod.Post, new { enctype  = "multipart/form-data" }))) 
{ 
@Html.ValidationSummary(true) 

<fieldset> 
    @Html.ListBoxFor(m => m.SelectedLanguageIds, Model.languages) 


<p> 
     <input type="submit" value="Save" /> 
</p> 
</fieldset> 
} 

請小心取代您實際使用的「操作」和「控制器」的「索引」和「主頁」。

編輯更改了代碼以使用ListBox而不是DropDownList。由達林季米特洛夫的回答啓發

0

我想我可以創建一個視圖模型

開門見山!這正是我會推薦你​​做的。

但是,如果你要堅持你的域模型,你可以做在視圖中的一些調整,以便能夠使用列表框幫手(完全不推薦的解決方案,但既然你問一些更整潔根據您的標準):

@model Snippet 
@Html.ListBox(
    "SelectedIds", 
    new MultiSelectList(
     Model.Languages.Select(l => new { Value = l.ID.Tostring(), Text = l.Name }), 
     "Value", 
     "Text" 
    ) 
)