2

我有一个包含几个部分的内容类型,其中一个可以添加一个议程,该议程由几个点组成,包括日期、时间、标题和富文本描述。换句话说,一个 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);

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

4

1 回答 1

3

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

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

于 2014-07-17T19:17:33.750 回答