C# 驱动程序中的视图模型
我有一个包含多个部分的内容类型,其中一个部分能够添加一个由多个点组成的议程,包括日期、时间、标题和富文本描述。换句话说,1-n关系。 此部分使用视图模型提交对象列表。 用户在提交之前可能已经在议程上花费了一些时间,如果其他部分没有验证,那么他们目前就失去了议程上的所有工作。 这并不意外,因为重新加载页面时会创建新的视图模型 然而,我不得不注意到,零件中的任何信息都将保持不变,我希望有一种方法也能将数据保持在视图模型中 驱动程序具有以下方法:C# 驱动程序中的视图模型,c#,asp.net-mvc,orchardcms,orchardcms-1.8,C#,Asp.net Mvc,Orchardcms,Orchardcms 1.8,我有一个包含多个部分的内容类型,其中一个部分能够添加一个由多个点组成的议程,包括日期、时间、标题和富文本描述。换句话说,1-n关系。 此部分使用视图模型提交对象列表。 用户在提交之前可能已经在议程上花费了一些时间,如果其他部分没有验证,那么他们目前就失去了议程上的所有工作。 这并不意外,因为重新加载页面时会创建新的视图模型 然而,我不得不注意到,零件中的任何信息都将保持不变,我希望有一种方法也能将数据保持在视图模型中 驱动程序具有以下方法: protected override DriverRe
protected override DriverResult Editor(AgendaPart part, dynamic shapeHelper)
{
return ContentShape("Parts_Agenda_Edit",
() => shapeHelper.EditorTemplate(
TemplateName: "Parts/Agenda",
Model: BuildEditorViewModel(part),
Prefix: Prefix));
}
protected override DriverResult Editor(AgendaPart part, IUpdateModel updater, dynamic shapeHelper)
{
var model = new AgendaViewModel();
updater.TryUpdateModel(model, Prefix, null, null);
if (part.ContentItem.Id != 0)
{
_agendaService.CreateUpdateAgenda(model, part.ContentItem);
}
return Editor(part, shapeHelper);
}
提交时,我得到如下视图模型:
var model = new AgendaViewModel();
updater.TryUpdateModel(model, Prefix, null, null);
加载编辑器以获取任何预先存在的视图模型数据时,是否可以执行任何“类似”操作?
如果没有,那么任何其他建议也将受到欢迎。ASP.NET MVC提供了一种跨请求持久化此类数据的机制:TempData。您可以在此控制器中看到一个示例:
我还想澄清的是,TryUpdateModel没有做任何持久性工作。它所做的是将客户端提交的数据(通常是表单数据)映射到您传入的对象上。部件记录是用来跟踪更改的,这些更改可以由Orchard自动持久化。本例针对控制器,ContentPartDriver是否提供了TempDataDictionary?您可以从筛选器访问它:它将是控制器上的一个属性,它本身就是筛选器上下文的属性。然后,您可以将其复制到当前请求的项目上,或者复制到Layout的动态属性上,您可以从驱动程序访问该属性。会话是另一种可以工作的存储类型,可以通过当前HTTP上下文从任何位置访问。