之前我已经使用网络控件完成了这项工作,但我似乎无法使用子布局。在特定项目的演示详细信息中,我正在分配我的子布局,然后在指定参数的附加参数部分中。这是我的子布局代码隐藏的代码。当我运行调试器时,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;
}
}
}
答案 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));
}
只需将参数的键名作为此函数的参数传递,即可获取在子布局中传递的参数的值。
希望这有帮助。