【问题标题】:Orchard Custom Content Type isn't saving果园自定义内容类型未保存
【发布时间】:2013-07-29 17:38:22
【问题描述】:

我创建了一个名为“AccessFolder”的自定义内容类型。我可以在内容类型列表中看到它,并且可以创建一个新的。当我创建一个新的 AccessFolder 时,我得到了我为它创建的编辑器模板。输入信息并单击保存后,我被定向到 Not Found 页面,但指示消息告诉我,我的 AccessFolder 已成功创建。

在驱动程序中,我可以看到使用updater.TryUpdateModel绑定后的模型。将正确的值分配给模型的属性。

它永远不会进入数据库。

AccessFolderPart:

public class AccessFolderPart : ContentPart<AccessFolderPartRecord>
{
    public virtual string Name
    {
        get { return Record.Name; }
        set { Record.Name = value; }
    }

    public virtual IEnumerable<RoleRecord> DownloadRoles
    {
        get { return Record.DownloadRoles.Select(x => x.RoleRecord); }
    }
}

AccessFolderPartRecord

public class AccessFolderPartRecord : ContentPartRecord
{
    public virtual string Name { get; set; }
    public virtual List<ContentAccessFolderRoleRecord> DownloadRoles { get; set; }
}

AccessFolderPartDriver的相关片段

    protected override DriverResult Editor(AccessFolderPart part, dynamic shapeHelper)
    {
        var viewModel = new AccessFolderViewModel(part, _roleService.GetRoles());
        return ContentShape("Parts_AccessFolder_Edit", () =>
            shapeHelper.EditorTemplate(TemplateName: templateName, Model: viewModel, Prefix: Prefix));
    }

    protected override DriverResult Editor(AccessFolderPart part, Orchard.ContentManagement.IUpdateModel updater, dynamic shapeHelper)
    {

        var viewModel = new AccessFolderViewModel { Part = part };
        updater.TryUpdateModel(viewModel, Prefix, null, null);

        if (part.ContentItem.Id != 0)
        {
            _roleService.UpdateRolesForAccessFolder(part.ContentItem, part.DownloadRoles);
        }

        return Editor(part, shapeHelper);

    }

自周五以来,我一直坚持这一点。我以前创建过自定义类型,从来没有遇到过任何问题。我在这里看不到我做错了什么。

更新 - 添加内容处理程序类

这是处理程序的一行:

public class AccessFolderPartHandler : ContentHandler
{
    public AccessFolderPartHandler(IRepository<AccessFolderPartRecord> repository)
    {
        Filters.Add(StorageFilter.For(repository));
    }
}

【问题讨论】:

  • 您记得在内容处理程序中添加存储过滤器吗?
  • @BrandonJoyce 是的,我已经有了。我更新了问题以反映它。
  • 没有日志文件是找不到问题的。请在此处发布日志文件以便我们为您提供帮助。
  • 您是否尝试过删除 nhibernate 映射(App_Data\Sites[sitename]\mappings.bin?我也有类似的经历,在编码新记录时没有错误但数据不会持久化到 DB。之后映射按预期重新生成数据保存。

标签: orchardcms orchardcms-1.6


【解决方案1】:

我认为您的驱动程序缺少正确的映射:

    if (updater.TryUpdateModel(viewModel, Prefix, null, null))
            {
               part.Name= viewModel.Name;

               if (part.ContentItem.Id != 0)
               {
                   _roleService.UpdateRolesForAccessFolder(part.ContentItem, part.DownloadRoles);
               }
            }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-14
    • 1970-01-01
    相关资源
    最近更新 更多