使用列表的编辑器模板

本文关键字:编辑器 列表 | 更新日期: 2023-09-27 17:59:55

我有这样的

public class ResumeVm
{
    public ResumeVm()
    {
        EducationVms = new List<EducationVm>();
    }
    public Guid UserId { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public List<EducationVm> EducationVms { get; set; }
}
 public class WorkExperienceVm
    {
        public string Title { get; set; }
    }

我现在想为每个EducationVm制作一个编辑器模板,我为1 Education Vm制作了一个模板,并尝试使用

@Html.EditorForModel("WorkExperienceVm")

但它不知道如何通过教育Vms

如果我做

@Html.EditorForModel("WorkExperienceVm", @Model.EducationVms )

它的制作是因为它预计只会发送1Vm。

//查看(WorkExperienceVm)

@model ViewModels.WorkExperienceVm
@Model.Title 

使用列表的编辑器模板

您使用的EditorForModel重载不正确。EditorForModel当前模型(即ResumeVm)生成一个编辑器模板,并且传入的字符串是附加视图数据对象,而不是视图的名称。

我假设"WorkExperienceVm"是视图的名称。尝试使用EditorFor:

@for(int i = 0; i < Model.EducationVms.Count; i++)
{
    Html.EditorFor(m => m.EducationVms[i], "WorkExperienceVm")
}

另一种选择是创建一个实际上称为EducationVm.cshtml的模板,并将其键入EducationVm,然后您只需执行以下操作,框架就会确定您希望为集合中的每个项目调用该模板:

@Html.EditorFor(m => m.EducationVms)

不幸的是,使用UIHint或手动将视图名称传递到帮助程序中都无法实现这种方法,尽管如果您不介意为模板遵守严格的命名约定,这不太可能妨碍您。

不久前,我写了另一个答案,解释了编辑器模板的不同助手之间的差异。它专门处理"标签"帮助程序,但同样的原则也适用于"编辑器"帮助程序。