Asp.net mvc 3 用关联的实体填充列表框

Asp.net mvc 3 用关联的实体填充列表框,asp.net-mvc-3,entity-framework-4,Asp.net Mvc 3,Entity Framework 4,我正在构建我的第一个管理代码片段的MVC(3)应用程序 显然,我有一个代码段的编辑页面,它有一种编程语言(0.*到0.1) 现在我的问题是,如何用现有的所有编程语言构建一个列表框,以便在编辑页面上显示一个代码段 我认为我可以创建一个ViewModel,并通过手动查询并将其作为列表传递来填充所有值,但我觉得构建MVC的人对此有一个更整洁的解决方案?我手头有Apress的“Pro MVC 3”和“Pro实体框架”,但似乎找不到答案 当我尝试时: @Html.EditorFor(model =>

我正在构建我的第一个管理代码片段的MVC(3)应用程序

显然,我有一个代码段的编辑页面,它有一种编程语言(0.*到0.1)

现在我的问题是,如何用现有的所有编程语言构建一个列表框,以便在编辑页面上显示一个代码段

我认为我可以创建一个ViewModel,并通过手动查询并将其作为列表传递来填充所有值,但我觉得构建MVC的人对此有一个更整洁的解决方案?我手头有Apress的“Pro MVC 3”和“Pro实体框架”,但似乎找不到答案

当我尝试时:

@Html.EditorFor(model => model.Language or model.Language.Name) 
我会犯错误


提前感谢,感谢您的帮助

以下是我在类似情况下的做法: 1) 为编辑语言创建视图模型

 public class LanguagesModel
{

    public IEnumerable<int> SelectedLanguageIds { get; set; }
    public MultiSelectList languages { get; set; }
}
公共类语言模型
{
公共IEnumerable SelectedLanguageId{get;set;}
公共多选列表语言{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);
    }
public ActionResult Index()
{
List languages=\u languageService.GetLanguages();//但是您可以从数据源获取语言
var temp=新的多选列表(
languages.Select(l=>new{Value=l.LanguageId.ToString(),Text=l.Name}),
“价值”,
“文本”);
LanguagesModel模型=新的LanguagesModel();
model.languages=temp;
返回视图(模型);
}
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>
}
@模型语言模型
@使用(Html.BeginForm(Html.BeginForm(“Index”,“Home”,FormMethod.Post,new{enctype=“multipart/formdata”})))
{
@Html.ValidationSummary(true)
@ListBoxFor(m=>m.selectedLanguageId,Model.languages)

}
小心地用实际使用的操作和控制器替换“索引”和“主”

编辑将代码更改为使用ListBox而不是DropDownList。受达林·迪米特罗夫回答的启发

我想我可以创建一个视图模型

直截了当!这正是我建议你做的

但是,如果您想坚持使用您的域模型,您可以在视图中进行一些调整,以便能够使用ListBox帮助器(完全不推荐的解决方案,但由于您要求根据您的标准提供更整洁的解决方案):

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