2016-02-22 30 views
0

我试图使用shown here的方法来允许我的EPiServer中的块在父ContentArea中查询其索引。我已经在另一个项目(项目A)中完成了这项工作,现在正在尝试在一个新项目(项目B)中再次执行此项目。但由于某些原因,在新项目中,ViewContext.ParentActionViewContext为空。我开始比较两者之间的差异,我注意到在项目A中,IsChildAction为真,并且RouteData.DataTokens仅包含一个键='ParentActionDataContext',但在项目B中,IsChildAction为假,并且RouteData.DataTokens包含主要请求的所有键。好的,所以ParentActionViewContext属性的描述是:尝试访问EPiServer中的父ContentArea时,ViewContext.ParentActionViewContext为null

一个对象,它包含父操作方法的视图上下文信息。

有意义的是,如果没有子操作,它将在项目B中为空。问题是,我不知道为什么项目A执行将ContentArea渲染为子操作,但项目B不执行。比较所述调用栈,我可以看到,它分支在EPiServer组件内的两个不同的方向(顶部每2帧下面叠加):

项目A

EPiServer.dll!EPiServer.Web.Mvc.PartialRequest.RenderAction(System.Web.Mvc.HtmlHelper helper, string action, string controller, object routeValues) Unknown 
EPiServer.dll!EPiServer.Web.Mvc.MvcContentRenderer.Render(System.Web.Mvc.HtmlHelper helper, EPiServer.Web.Mvc.PartialRequest partialRequestHandler, EPiServer.Core.IContentData contentData, EPiServer.DataAbstraction.TemplateModel templateModel) Unknown 
EPiServer.dll!EPiServer.Web.Mvc.Html.IContentDataExtensions.RenderContentData(System.Web.Mvc.HtmlHelper html, EPiServer.Core.IContentData contentData, bool isContentInContentArea, EPiServer.DataAbstraction.TemplateModel templateModel, EPiServer.Web.Mvc.IContentRenderer contentRenderer) Unknown 
EPiServer.dll!EPiServer.Web.Mvc.Html.ContentAreaRenderer.RenderContentAreaItem(System.Web.Mvc.HtmlHelper htmlHelper, EPiServer.Core.ContentAreaItem contentAreaItem, string templateTag, string htmlTag, string cssClass) Unknown 
EPiServer.dll!EPiServer.Web.Mvc.Html.ContentAreaRenderer.RenderContentAreaItems(System.Web.Mvc.HtmlHelper htmlHelper, System.Collections.Generic.IEnumerable<EPiServer.Core.ContentAreaItem> contentAreaItems) Unknown 
EPiServer.dll!EPiServer.Web.Mvc.Html.ContentAreaRenderer.Render(System.Web.Mvc.HtmlHelper htmlHelper, EPiServer.Core.ContentArea contentArea) Unknown 
EPiServer.dll!EPiServer.Web.Mvc.Html.ContentAreaExtensions.RenderContentArea(System.Web.Mvc.HtmlHelper htmlHelper, EPiServer.Core.ContentArea contentArea) Unknown 
App_Web_zaun2obg.dll!ASP.util_views_shared_displaytemplates_contentarea_ascx.__Render__control1(System.Web.UI.HtmlTextWriter __w, System.Web.UI.Control parameterContainer) Line 4 C# 

项目B

EPiServer.dll!EPiServer.Web.Mvc.MvcContentRenderer.HandleRenderTemplateWithViewEngine(System.Web.Mvc.HtmlHelper helper, EPiServer.Core.IContentData contentData, EPiServer.DataAbstraction.TemplateModel templateModel) Unknown 
EPiServer.dll!EPiServer.Web.Mvc.MvcContentRenderer.Render(System.Web.Mvc.HtmlHelper helper, EPiServer.Web.Mvc.PartialRequest partialRequestHandler, EPiServer.Core.IContentData contentData, EPiServer.DataAbstraction.TemplateModel templateModel) Unknown 
EPiServer.dll!EPiServer.Web.Mvc.Html.IContentDataExtensions.RenderContentData(System.Web.Mvc.HtmlHelper html, EPiServer.Core.IContentData contentData, bool isContentInContentArea, EPiServer.DataAbstraction.TemplateModel templateModel, EPiServer.Web.Mvc.IContentRenderer contentRenderer) Unknown 
EPiServer.dll!EPiServer.Web.Mvc.Html.ContentAreaRenderer.RenderContentAreaItem(System.Web.Mvc.HtmlHelper htmlHelper, EPiServer.Core.ContentAreaItem contentAreaItem, string templateTag, string htmlTag, string cssClass) Unknown 
EPiServer.dll!EPiServer.Web.Mvc.Html.ContentAreaRenderer.RenderContentAreaItems(System.Web.Mvc.HtmlHelper htmlHelper, System.Collections.Generic.IEnumerable<EPiServer.Core.ContentAreaItem> contentAreaItems) Unknown 
EPiServer.dll!EPiServer.Web.Mvc.Html.ContentAreaRenderer.Render(System.Web.Mvc.HtmlHelper htmlHelper, EPiServer.Core.ContentArea contentArea) Unknown 
EPiServer.dll!EPiServer.Web.Mvc.Html.ContentAreaExtensions.RenderContentArea(System.Web.Mvc.HtmlHelper htmlHelper, EPiServer.Core.ContentArea contentArea) Unknown 
App_Web_myevwxkt.dll!ASP.util_views_shared_displaytemplates_contentarea_ascx.__Render__control1(System.Web.UI.HtmlTextWriter __w, System.Web.UI.Control parameterContainer) Line 4 C# 

但我打电话都以同样的方式:

项目A:

@Html.PropertyFor(m => m.CurrentPage.WallBlocks) 

项目B:

@Html.PropertyFor(m => m.CurrentPage.DepartmentalSupportBlocks) 

任何想法发生了什么事或我怎样才能使它工作,所以我可以在我的HTML辅助父的含量 - 面积得到什么?

回答

0

我发现了这个问题。我认为ParentActionViewContext为空是正确的,因为该块没有被作为子视图执行。原因似乎是因为我的区块没有控制器。它看起来像EPiServer将渲染具有控制器作为子Actions的块,但是那些没有控制器作为相同请求的一部分。我想这就是为什么建议不出于效率原因使用控制器的原因。但是,如果您需要有关父母ContentArea的信息,那么您确实需要拥有一个控制器。

P.S.请确保从块控制器返回PartialView(...)而不是View(...),以便您不花费额外几个小时试图弄清楚为什么它会对您大喊大叫,

该模型传递到字典中产品类型 的“Castle.Proxies。[MyBlock]代理”,但是这本词典需要类型“[我的默认布局的模型类型]”

+0

为了得到更多信息的模型 项目是怎么回事引擎盖下:你可以在这里阅读更多 - http://blog.tech-fellow。净/ 2015/05/30 /内容 - 面积 - 下引擎罩部分-2 /#whathappensaftertemplateisselected –

相关问题