2012-07-28 104 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" 
    ) 
)