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

Jquery Orchard CMS从MVC控制器渲染内容部分形状,jquery,ajax,asp.net-mvc,razor,orchardcms,Jquery,Ajax,Asp.net Mvc,Razor,Orchardcms,我到处都找过,但似乎找不到我要找的东西。我正在尝试使用AJAX从MVC控制器渲染内容部分形状,但在渲染形状时遇到问题,希望有人能提供帮助 我尝试在content manager上使用“BuildDisplay”方法,将内容部分传递给它,但它会为从content manager查询返回的项目创建形状。我还尝试使用“BuildDisplayShape”,将ContainerPart作为T传递,并从Content Manager查询返回项 使用Ajax,我将自定义id号传递给我的控制器。在控制器操作中

我到处都找过,但似乎找不到我要找的东西。我正在尝试使用AJAX从MVC控制器渲染内容部分形状,但在渲染形状时遇到问题,希望有人能提供帮助

我尝试在content manager上使用“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);
    }
[HttpGet]
公共行动结果返回儿童(int id)
{
var parent=_contentManager.Query().Where(o=>o.ItemId==id.List().FirstOrDefault();
ContainerPart容器=null;
如果(父项!=null)
{
container=parent.As();
}
if(容器==null)
{
返回null;
}
var shape=_contentManager.BuildDisplay(容器,“摘要”);
//shape=_contentManager.BuildDisplayShape(container.Id,“Summary”);
//shape=_contentManager.BuildDisplay(容器,“摘要”);
//返回视图(“ItemSelector/ReturnChildren”,形状);
返回新的ShapeResult(此,形状);
}

提前为帮助干杯

我认为您不能只渲染单个内容部分,只能渲染整个内容项。如果您只想显示单个内容部分,您可以执行以下操作

var shape = _contentManager.BuildDisplay(container, "ContainerPartDisplay");
然后使用您的位置隐藏除ContainerPart之外的所有其他部分/字段

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

...

它感觉有点像黑客,但应该给你你想要的

我添加了一个新的视图,以准确地包含我想要显示的内容,并创建了我自己的细节类型,该类型在零件驱动程序中处理。由于没有其他零件使用我的自定义详图类型,因此我不必隐藏任何其他形状。在控制器中,我只能执行以下操作:

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

感谢您对Hazza的帮助。

哦,您可能需要将查询调整为.query(),否则它将非常慢,包含大量内容项。直接列出可能会返回许多不必要的结果。值得思考的是:)谢谢,我将查询改为查询记录而不是列表。