在Orchard中,如何在模块内的cshtml页面上呈现ContentType的编辑器

时间:2013-11-12 11:36:10

标签: handler orchardcms content-type

我定义了一个contentType,以及一个驱动程序+处理程序,它在管理页面内工作正常但我想在我的模块内的cshtml页面上呈现contentType的编辑器。我该如何做到这一点,我仍然可以获得持久存在的部分等的好处。

1 个答案:

答案 0 :(得分:1)

您可以使用IContentManager.BuildEditor(...)生成内容项的编辑器形状,并使用@Display(Model.Whatever)在视图中呈现它。

要处理更新,您还可以使用IContentManager.UpdateEditor(...),传入IUpdateModel的实施者。

IUpdateModel只是一种抽象调用TryUpdateModelAddModelError的常规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找到一个很好的简洁例子。

另外,您可能会认识到IUpdateModelprefix开发内容部分驱动程序 - 这种抽象非常通用,因为它允许您处理同时更新的多个编辑器(这是如何实现内容部分,字段等的东西)。它允许您做一些很酷的事情,比如在同一页面上编辑多个内容项。我们在工作中使用它来实现一个自定义表单编辑器,它具有一些很好的功能,如拖放设计等。