使用关联实体填充列表框

时间:2012-07-28 07:16:47

标签: asp.net-mvc-3 entity-framework-4

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

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

现在我的问题是,如何构建一个包含所有当前编程语言的列表框,以便在我的编辑页面上显示一个片段?

我想我可以创建一个ViewModel,并通过手动查询并将它们作为列表传递来填充所有值,但我觉得构建MVC的人对此有一个更整洁的解决方案?我在Apress手边有“Pro MVC 3”和“Pro Entity Framework”,但似乎无法找到答案。

当我尝试:

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

我收到错误。

在此先感谢,任何帮助表示赞赏!

2 个答案:

答案 0 :(得分: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。灵感来自Darin Dimitrov的回答

答案 1 :(得分:0)

  

我想我可以创建一个ViewModel

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

但是如果你想坚持你的域模型你可以在视图中做一些调整,以便能够使用ListBox助手(完全不推荐的解决方案,但因为你要求更多的东西整洁根据您的标准):

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