将参数传递给Sitecore Sublayout

时间:2010-01-07 14:42:29

标签: sitecore

之前我已经使用网络控件完成了这项工作,但我似乎无法使用子布局。在特定项目的演示详细信息中,我正在分配我的子布局,然后在指定参数的附加参数部分中。这是我的子布局代码隐藏的代码。当我运行调试器时,RenderPageTitle只是null。

public partial class PageContent : System.Web.UI.UserControl
{
    public String RenderPageTitle { get; set; }
    protected void Page_Load(object sender, EventArgs e)
    {
        if (RenderPageTitle.ToLower().Equals("false"))
        {
            TitleFieldRenderer.Visible = false;
        }
    }
}

3 个答案:

答案 0 :(得分:10)

请参阅this blog post

对于sitecore6,在.cs文件中:

string rawParameters = this.Parameters;
NameValueCollection parameters = Sitecore.Web.WebUtil.ParseUrlParameters(rawParameters);

或.ascx文件:

string rawParameters = Attributes["sc_parameters"];
NameValueCollection parameters = Sitecore.Web.WebUtil.ParseUrlParameters(rawParameters);

答案 1 :(得分:2)

可能有更好的方法来做到这一点。很难说。

子布局的参数是URL编码的(HttpUtility.UrlEncode或类似的),并像查询字符串一样连接在一起,然后放在控件的“sc_parameters”属性中。

所以,就像chiesa所说的那样,在一个Web用户控件中(这就是博客所指的.ascx文件)你可以这样做:

string rawParameters = Attributes["sc_parameters"];
NameValueCollection parameters = 
  Sitecore.Web.WebUtil.ParseUrlParameters(rawParameters);

然后你将参数作为字符串字典。但是,这些仍然是编码的,因此如果它们包含除字母和数字之外的任何内容,您可能希望使用类似HttpUtility.UrlDecode的东西来修复它们。

string color_scheme = HttpUtility.UrlDecode(parameters["ColorScheme"]);
int ash_diffuser_id = // Could have a + sign prepended or something.
  HttpUtility.UrlDecode(Int32.Parse(parameters["AshDiffuserID"]));

答案 2 :(得分:0)

您可以通过使用NameValueCollection数据类型声明_Param变量来获取sublayout的参数值,并通过传递键值来引用tem以获取特定参数值。这样,这个常用函数可以驻留在帮助文件中,并且可以重用。

以下是代码段。

// All known parameters passed to the sublayout.
static NameValueCollection _params = null;

/// <summary>
/// Return the value of a specific parameter.
/// </summary>
/// <param name="key">Parameter name.</param>
/// <returns>Value of specified parameter.</returns>
public static string GetParam(string key)
{
    key.Trim().ToLower();
    string result = _params[key.Trim().ToLower()];

    if (String.IsNullOrEmpty(result))
     {
          result = String.Empty;
     }

    return (System.Web.HttpUtility.UrlDecode(result));
}

只需将参数的键名作为此函数的参数传递,即可获取在子布局中传递的参数的值。

希望这有帮助。