2010-01-07 77 views
3

我已经使用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; 
     } 
    } 
} 
+0

你想在子文件中做什么? – Younes 2010-01-07 15:00:08

+0

根据RenderPageTitle的值在子布局中选择性地显示一个控件。我不认为这与问题有关,但我添加了完整的代码,希望能够帮助解决这个问题。 – Kyle 2010-01-07 15:20:06

回答

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

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

子层布局的参数是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"])); 
+0

哪些命名空间是'属性'? – 2018-02-20 15:06:52

0

可以通过声明_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传递的参数的值。

希望这会有所帮助。