使用列表的编辑器模板
本文关键字:编辑器 列表 | 更新日期: 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
或手动将视图名称传递到帮助程序中都无法实现这种方法,尽管如果您不介意为模板遵守严格的命名约定,这不太可能妨碍您。
不久前,我写了另一个答案,解释了编辑器模板的不同助手之间的差异。它专门处理"标签"帮助程序,但同样的原则也适用于"编辑器"帮助程序。