layoutparameterssitecoresitecore6

Sitecore: How to use sublayout parameters from codebehind?


How do I get the values from the "Parameters" field (second screenshot) in the code-behind of the sublayout?

I understand I can get/set parameters on a rendering (specifically sublayout) when it is added to the presentation details of an item, just as described here (Sitecore 6 - using parameters).

layout instance parameters

However I would like to use the parameters field from the layout definition item. In the codebehind of the file belonging to to layout definition I can cast the parent to a sublayout and that object also has a .Parameters property, however this doesn't contain the values I'd expect.

layout definition parameters

This is the Page_Load method in the control code-behind:

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?
}

Doublecheck still doesn't work, only additional parameters are shown:

Step 1 - Enter parameters

Step 2 - Add sublayout + parameters to presentation

Step 3 - Display parameters on sublayout

Step 4 - Validate result


Solution

  • You can get the parameters defined on the sublayout but it's a bit long winded. You need to find the correct rendering item first and from there retrieve the parameters

       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);
    

    You can use Mark's way to get the parameters for the parameters set in the "Layout Details"

    EDIT: The above solution will work but it's very fragile and depends on sitecore internals that might change in the future. I wouldn't recommend you go with it in production with it. There must be a better way to achieve what you want.