【问题标题】:How can I create more than one Model in a view? Preferably using Partial Views and a dynamic number of models如何在一个视图中创建多个模型?最好使用部分视图和动态数量的模型
【发布时间】:2013-02-27 15:34:28
【问题描述】:

我有一个“技能”列表,我希望用户能够通过,从列表中选择适当的级别。所以 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,但我看不出这将如何与动态列表一起使用,并且由于它们都是相同的类型(“技能”),我猜 ViewModel 看起来就像模型列表。

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

谢谢

【问题讨论】:

  • 我真的不知道如何绑定它。显然需要递归。但是如何维持这样的关系……我很挣扎。答案我给了简单数组的作品...

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


【解决方案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 中的每个技能。

【讨论】:

  • 我喜欢这个实现
  • 我可以只检查这些文件的放置位置吗?我有一个名为“Skill”的控制器,所以我现在有 Views/Skill/EditorTemplates/Skills.cshtml。使用@Html.EditorFor(p => p.Skills) 行似乎没有包含该模板。我可能需要检查任何设置(例如是否使用 Razor)?对不起,如果这是一个新手问题!感谢您的帮助。
  • MVC 中有很多看起来很神奇的东西。它将看到 Skills 是一个IEnumerable<Skill>,因此它将在 EditorTemplates 文件夹中查找名称为 Skill.cshtml@model Skill 的文件,我不记得是哪个。另外,请注意文件名应该是Skill.cshtml,而不是Skills.cshtml。我会更新我的答案。
猜你喜欢
  • 1970-01-01
  • 2018-07-30
  • 2021-05-14
  • 1970-01-01
  • 1970-01-01
  • 2020-02-26
  • 2014-10-04
  • 2023-02-16
  • 1970-01-01
相关资源
最近更新 更多