将参数传递给Sitecore子图层
我已经使用Web控件完成了此操作,但似乎无法使其与子图层一起工作。在特定项目的演示详细信息中,我将指定我的Sublayout,然后在指定参数的附加参数部分中进行指定。这是代码隐藏在我的sublayout中的代码。当我运行调试器时,RenderPageTitle只是null。将参数传递给Sitecore子图层
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;
}
}
}
请参考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);
可能有一些更好的方法来做到这一点。这很难说。
子层布局的参数是URL编码(HttpUtility.UrlEncode或类似的)并像查询字符串一样连接在一起,然后放置在控件的“sc_parameters”属性中。
因此,像基耶萨说,在一个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"]));
哪些命名空间是'属性'? – 2018-02-20 15:06:52
可以通过声明_Param变量与NameValueCollection中的数据类型有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));
}
你可以简单地通过传递参数的键名,因为这函数的参数让你在sublayout传递的参数的值。
希望这会有所帮助。
你想在子文件中做什么? – Younes 2010-01-07 15:00:08
根据RenderPageTitle的值在子布局中选择性地显示一个控件。我不认为这与问题有关,但我添加了完整的代码,希望能够帮助解决这个问题。 – Kyle 2010-01-07 15:20:06