我定义了一个contentType,以及一个驱动程序+处理程序,它在管理页面内工作正常但我想在我的模块内的cshtml页面上呈现contentType的编辑器。我该如何做到这一点,我仍然可以获得持久存在的部分等的好处。
答案 0 :(得分:1)
您可以使用IContentManager.BuildEditor(...)
生成内容项的编辑器形状,并使用@Display(Model.Whatever)
在视图中呈现它。
要处理更新,您还可以使用IContentManager.UpdateEditor(...)
,传入IUpdateModel
的实施者。
IUpdateModel
只是一种抽象调用TryUpdateModel
和AddModelError
的常规ASP MVC控制器调用的Orchardy方式,所以如果你从自定义控制器渲染编辑器,你可以像这样轻松实现:
bool IUpdateModel.TryUpdateModel<TModel>(TModel model, string prefix, string[] includeProperties, string[] excludeProperties) {
return TryUpdateModel(model, prefix, includeProperties, excludeProperties);
}
void IUpdateModel.AddModelError(string key, LocalizedString errorMessage) {
ModelState.AddModelError(key, errorMessage.ToString());
}
你可以在Orchard.Blogs.Controllers.BlogAdminController
找到一个很好的简洁例子。
另外,您可能会认识到IUpdateModel
和prefix
开发内容部分驱动程序 - 这种抽象非常通用,因为它允许您处理同时更新的多个编辑器(这是如何实现内容部分,字段等的东西)。它允许您做一些很酷的事情,比如在同一页面上编辑多个内容项。我们在工作中使用它来实现一个自定义表单编辑器,它具有一些很好的功能,如拖放设计等。