2010-01-07 2 views
3

Je l'ai déjà fait avec un contrôle Web, mais je n'arrive pas à le faire fonctionner avec une sous-couche. Sur les détails de la présentation pour un article particulier, j'assigne ma Sublayout puis dans la section des paramètres supplémentaires en spécifiant le paramètre. Voici le code qui est dans le code-behind pour mon sous-jacent. Lorsque je lance le débogueur, RenderPageTitle est juste nul.Passage de paramètres à une sous-couche 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

Que voulez-vous faire dans le sous-menu? – Younes

+0

Afficher de manière sélective un contrôle dans le sous-dénombrement en fonction de la valeur de RenderPageTitle. Je ne pense pas que ce soit pertinent à la question, mais j'ai ajouté le code complet pour aider à éclaircir cela. – Kyle

Répondre

10

veuillez vous référer à this blog post.

Pour sitecore6, dans le fichier .cs:

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

ou dans le fichier .ascx:

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

Il peut y avoir une meilleure façon de le faire. C'est difficile à dire.

Les paramètres d'un sous-dénombrement sont codés en URL (HttpUtility.UrlEncode ou similaire) et joints ensemble comme une chaîne de requête, puis placés dans l'attribut "sc_parameters" du contrôle.

Ainsi, comme chiesa a dit, dans un contrôle utilisateur Web (ce qui est ce que ce blog entend par fichier .ascx) vous pouvez le faire:

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

Et puis vous avez les paramètres comme un dictionnaire de chaînes. Cependant, ceux-ci sont toujours encodés, donc s'ils contiennent autre chose que des lettres et des nombres, vous voudrez probablement utiliser quelque chose comme HttpUtility.UrlDecode pour les corriger.

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

de quel espace de noms provient 'Attributes'? –

0

Vous pouvez avoir une valeur de paramètre d » sublayout en déclarant la variable _Param avec le type de données NameValueCollection et tem se référer pour obtenir la valeur de paramètre spécifique en passant la valeur de clé. De cette façon, cette fonction commune peut résider dans un fichier d'aide et peut être réutilisée.

Voici l'extrait de code.

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

Vous pouvez obtenir la valeur du paramètre que vous avez passé dans le sublayout simplement en passant le nom clé du paramètre comme argument de cette fonction.

Espérons que cela aide.

Questions connexes