Orchard坚持在驱动程序中的viewmodel

时间:2014-07-17 12:35:31

标签: c# asp.net-mvc orchardcms orchardcms-1.8

我有一个包含多个部分的内容类型,其中一个部分能够添加包含日期,时间,标题和丰富文本描述的多个点的议程。换句话说,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);

有什么"类似的"加载编辑器以获取任何预先存在的视图模型数据时可以完成哪些操作? 如果没有,那么任何其他建议也会受到赞赏。

1 个答案:

答案 0 :(得分:3)

ASP.NET MVC提供了一种在请求之间保存此类数据的机制:TempData。您可以在此控制器中查看此示例:https://bitbucket.org/bleroy/nwazet.commerce/src/b558d7988c4f6c66cdd0b2dd6b533d8ad3bfbceb/Controllers/StripeController.cs?at=default

我还想明确表示TryUpdateModel没有做任何持久性工作。它的作用是将客户提交的数据(通常是表单数据)映射到您传入的对象上。部分记录是跟踪可以自动保留的更改的内容由乌节。

相关问题