1

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

4

1 回答 1

1

您可以使用IContentManager.BuildEditor(...)为内容项生成编辑器形状,并使用@Display(Model.Whatever).

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

IUpdateModel这只是一种抽象调用的 Orchardy 方式TryUpdateModelAddModelError您可以在常规 ASP MVC 控制器中找到这种方式,因此如果您从自定义控制器呈现您的编辑器,您可以像这样轻松实现它:

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开发您的内容部分驱动程序 - 这种抽象非常通用,因为它允许您处理同时更新的多个编辑器(这就是内容部分、字段等内容的实现方式) . 它允许您做一些很酷的事情,例如在同一页面上编辑多个内容项。我们在我的工作中使用它来实现一个自定义表单编辑器,它具有一些不错的功能,如拖放设计等。

于 2013-11-12T11:58:15.670 回答