0

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

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

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

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

当我尝试:

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

我得到错误。

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

4

2 回答 2

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 回答的启发

于 2012-07-28T07:50:57.187 回答
0

我想我可以创建一个 ViewModel

开门见山!这正是我建议你做的。

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

@model Snippet
@Html.ListBox(
    "SelectedIds", 
    new MultiSelectList(
        Model.Languages.Select(l => new { Value = l.ID.Tostring(), Text = l.Name }),
        "Value",
        "Text"
    )
)
于 2012-07-28T07:53:55.880 回答