Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 驱动程序中的视图模型_C#_Asp.net Mvc_Orchardcms_Orchardcms 1.8 - Fatal编程技术网

C# 驱动程序中的视图模型

C# 驱动程序中的视图模型,c#,asp.net-mvc,orchardcms,orchardcms-1.8,C#,Asp.net Mvc,Orchardcms,Orchardcms 1.8,我有一个包含多个部分的内容类型,其中一个部分能够添加一个由多个点组成的议程,包括日期、时间、标题和富文本描述。换句话说,1-n关系。 此部分使用视图模型提交对象列表。 用户在提交之前可能已经在议程上花费了一些时间,如果其他部分没有验证,那么他们目前就失去了议程上的所有工作。 这并不意外,因为重新加载页面时会创建新的视图模型 然而,我不得不注意到,零件中的任何信息都将保持不变,我希望有一种方法也能将数据保持在视图模型中 驱动程序具有以下方法: protected override DriverRe

我有一个包含多个部分的内容类型,其中一个部分能够添加一个由多个点组成的议程,包括日期、时间、标题和富文本描述。换句话说,1-n关系。 此部分使用视图模型提交对象列表。 用户在提交之前可能已经在议程上花费了一些时间,如果其他部分没有验证,那么他们目前就失去了议程上的所有工作。 这并不意外,因为重新加载页面时会创建新的视图模型

然而,我不得不注意到,零件中的任何信息都将保持不变,我希望有一种方法也能将数据保持在视图模型中

驱动程序具有以下方法:

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上下文从任何位置访问。