使用列表的编辑器模板

时间:2014-04-23 18:04:03

标签: c# asp.net-mvc

我有类似的东西

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 

1 个答案:

答案 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来解释编辑器模板的不同助手之间的差异。它专门处理“标签”助手,但同样的原则适用于“编辑”助手。