如何在视图中创建多个模型?最好使用部分视图和动态数量的模型

时间:2013-02-27 15:34:29

标签: asp.net asp.net-mvc asp.net-mvc-3 razor asp.net-mvc-4

我有一些“技能”列表,我希望用户能够通过,从列表中选择适当的级别。所以Skill看起来像这样:

public class Skill
{
    public String SkillName { get; set; }
    public SkillLevel CurrentSkillLevel { get; set; }
    public Boolean IsRequired { get; set; }

    public Skill(String Name)
    {
        this.SkillName = Name;
        this.IsRequired = true;
        this.CurrentSkillLevel = SkillLevel.None;
    }
}

可能有数百种技能 - 目前确切的数字是未知的,当然它需要是动态的,所以我不想让用户经历点击每项技能的过程,填写表格,每次提交。我想在同一页面中显示所有技能(每行一行),允许用户选择所有值,然后在结束时点击提交一次。

不幸的是,除了单例创建之外,我没有任何使用MVC的经验。我通常会为捆绑在一起的几个模型使用单独的ViewModel,但我不知道它如何与动态列表一起使用,并且因为它们都是相同的类型(“Skill”),我想ViewModel看起来很像一个模型列表。

有没有人有合适的解决方案?

由于

1 个答案:

答案 0 :(得分:1)

基于DaveA的答案,您可以使用Skill的编辑器模板。您需要将名为EditorTemplates的文件夹添加到Views\Controller文件夹中。现在在名为Skill.cshtml的文件夹中创建一个看起来像这样的

的局部视图
@model Skill

@Html.TextBoxFor(s => s.SkillName)
@Html.TextBoxFor(s => s.Skills[i].Title)
// etc...

现在在主视图中

using (Html.BeginForm("UpdateCart", "Orders"))
{

    @Html.TextBoxFor(p=>p.Name)
    @Html.TextBoxFor(p=>p.Title)

    @Html.EditorFor(p => p.Skills)
}

Razor非常聪明,它将使用Skill.cshtml编辑器模板在Skills中呈现每项技能。