如何从子布局的代码隐藏中的“参数”字段(第二个屏幕截图)中获取值?
我理解,当将它添加到项目的演示文稿详细信息时,我可以在渲染(特别是子布局)上获取/设置参数,正如此处所述(Sitecore 6 - using parameters)。
但是我想使用布局定义项中的参数字段。在属于布局定义的文件的代码隐藏中,我可以将父窗口转换为子布局,并且该对象也具有.Parameters
属性,但是这不包含我期望的值。
这是控制代码隐藏中的Page_Load
方法:
protected void Page_Load(object sender, EventArgs e)
{
var sublayout = ((Sublayout)this.Parent);
string rawParameters = Attributes["sc_parameters"];
NameValueCollection parameters =
Sitecore.Web.WebUtil.ParseUrlParameters(rawParameters);
//parameters contains values from "Additional parameters (first screenshot)
//I do not know the sublayout item id or sublayout path, so how do I get
//the values from the second screenshot?
}
additional parameters
:
答案 0 :(得分:11)
像这样:
var sublayout = ((Sublayout)this.Parent);
NameValueCollection nvc = Sitecore.Web.WebUtil.ParseUrlParameters(sublayout.Parameters);
Here's a blog post that make it easier to do with extension methods
Here's a shared source module for Sitecore that wraps this up in a class as well。它由Sitecore USA的首席技术官John West撰写。
答案 1 :(得分:2)
你可以获得在子布局上定义的参数,但它有点长。您需要首先找到正确的渲染项,然后从中检索参数
var sublayout = ((Sublayout)this.Parent);
//Get all rendering
var renderings = Sitecore.Context.Item.Visualization.GetRenderings(Sitecore.Context.Device, true);
//Get the first rendering that matches the current sublayout's path
var sublayoutRendering = renderings.FirstOrDefault(r => r.RenderingItem.InnerItem["Path"] == sublayout.Path);
if (sublayoutRendering != null)
Response.Write(sublayoutRendering.RenderingItem.Parameters);
您可以使用Mark的方式获取“布局详细信息”
中设置的参数的参数 编辑:上述解决方案可行,但它非常脆弱,取决于未来可能会发生变化的sitecore内部。我不建议你随身携带它。必须有更好的方法来实现你想要的东西。