我到处寻找这个,但似乎无法找到我正在寻找的东西。我尝试使用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);
}
提前干杯帮忙!
答案 0 :(得分:3)
我不相信你只能呈现单个内容部分,只能呈现整个内容项目。如果您只想显示单个内容部分,则可以执行类似...
的操作var shape = _contentManager.BuildDisplay(container, "ContainerPartDisplay");
然后使用您的展示位置隐藏除ContainerPart之外的所有其他部分/字段...
<Match DisplayType="ContainerPartDisplay">
<Place Parts_Title="-" />
...
</Match>
感觉有点黑客,但应该给你你想要的东西
答案 1 :(得分:0)
我结束时添加了一个新视图,以准确包含我想要显示的内容以及创建我自己的详细信息类型,该类型在部件驱动程序中处理。由于没有其他部分使用我的自定义细节类型,因此我不必隐藏任何其他形状。在控制器中我能够做到:
var shape = _contentManager.BuildDisplay(container, "myDetailType");
感谢你帮助哈扎。