我创建了一个名为“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));
}
}
答案 0 :(得分:0)
我认为你错过了正确的驱动程序映射:
if (updater.TryUpdateModel(viewModel, Prefix, null, null))
{
part.Name= viewModel.Name;
if (part.ContentItem.Id != 0)
{
_roleService.UpdateRolesForAccessFolder(part.ContentItem, part.DownloadRoles);
}
}