我有类似的东西
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; }
}
我现在想为每个EducationVms制作一个编辑器模板,我为1 Education Vm制作了一个模板并尝试使用
@Html.EditorForModel("WorkExperienceVm")
但它不知道如何传递EducationVms
如果我这样做
@Html.EditorForModel("WorkExperienceVm", @Model.EducationVms )
它可以发送,因为它只需要发送1 Vm。
//查看(WorkExperienceVm)
@model ViewModels.WorkExperienceVm
@Model.Title
答案 0 :(得分:0)
您使用的EditorForModel
重载不正确。 EditorForModel
为当前模型(即ResumeVm
)生成一个编辑器模板,而您传入的字符串是additional view data对象,而不是观点。
我假设“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
或手动将视图名称传递给帮助程序无法实现此方法,但如果您不介意遵守严格的命名约定,则不太可能妨碍您使用你的模板。
前一段时间我写了another answer来解释编辑器模板的不同助手之间的差异。它专门处理“标签”助手,但同样的原则适用于“编辑”助手。