Orchard CMS从MVC控制器渲染内容部件形状

时间:2014-07-29 08:59:35

标签: jquery ajax asp.net-mvc razor orchardcms

我到处寻找这个,但似乎无法找到我正在寻找的东西。我尝试使用AJAX从MVC控制器渲染内容部件形状,但我在渲染形状时遇到问题,我希望有人可以提供帮助。

我尝试过使用' BuildDisplay'内容管理器上的方法通过传递内容部分,但它创建从我的Content Manager查询返回的项目的形状。我还尝试使用' BuildDisplayShape',将ContainerPart作为T传入,并从Content Manager查询返回该项。

使用Ajax,我将自定义ID号传递给我的控制器。在控制器操作中,我使用内容管理器查询并返回匹配的第一个项目。返回的项目将始终具有容器部分。我想获取找到的项目容器部分并构建呈现所包含项目的形状,然后将其返回到我将在其中显示的视图。

    [HttpGet]
    public ActionResult ReturnChildren(int id)
    {
        var parent = _contentManager.Query<ItemPart, ItemPartRecord>().Where(o => o.ItemId == id).List().FirstOrDefault();
        ContainerPart container = null;

        if (parent != null)
        {
            container = parent.As<ContainerPart>();
        }

        if (container == null)
        {
            return null;
        }


        var shape = _contentManager.BuildDisplay(container, "Summary");

        // shape = _contentManager.BuildDisplayShape<ContainerPart>(container.Id, "Summary");
        // shape = _contentManager.BuildDisplay(container, "Summary");

        //return View("ItemSelector/ReturnChildren", shape);
        return new ShapeResult(this, shape);
    }

提前干杯帮忙!

2 个答案:

答案 0 :(得分:3)

我不相信你只能呈现单个内容部分,只能呈现整个内容项目。如果您只想显示单个内容部分,则可以执行类似...

的操作
var shape = _contentManager.BuildDisplay(container, "ContainerPartDisplay");

然后使用您的展示位置隐藏除ContainerPart之外的所有其他部分/字段...

<Match DisplayType="ContainerPartDisplay">
 <Place Parts_Title="-" />
 ...
</Match>

感觉有点黑客,但应该给你你想要的东西

答案 1 :(得分:0)

我结束时添加了一个新视图,以准确包含我想要显示的内容以及创建我自己的详细信息类型,该类型在部件驱动程序中处理。由于没有其他部分使用我的自定义细节类型,因此我不必隐藏任何其他形状。在控制器中我能够做到:

var shape = _contentManager.BuildDisplay(container, "myDetailType");

感谢你帮助哈扎。