Передача параметров в подкласс Sitecore - PullRequest
3 голосов
/ 07 января 2010

Я делал это раньше с помощью веб-элемента управления, но, похоже, я не могу заставить его работать с подуровнем. В деталях презентации для конкретного элемента я назначаю свой подуровень, а затем в разделе дополнительных параметров указываю параметр. Вот код, который находится в коде позади моего подслоя. Когда я запускаю отладчик, RenderPageTitle просто равен нулю.

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 ]

10 голосов
/ 22 июля 2010

см. это сообщение в блоге .

Для 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 голосов
/ 12 августа 2010

Возможно, есть лучший способ сделать это. Трудно сказать.

Параметры для подуровня кодируются в URL (HttpUtility.UrlEncode или аналогичный) и объединяются в виде строки запроса, а затем помещаются в атрибут sc_parameters элемента управления.

Итак, как сказал chiesa, в пользовательском веб-элементе управления (это то, что этот блог имел в виду .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 голосов
/ 23 мая 2014

Вы можете получить значение параметра подслоя, объявив переменную _Param с типом данных NameValueCollection и сослаться на них, чтобы получить значение конкретного параметра, передав значение ключа. Таким образом, эта общая функция может находиться в файле помощника и может быть использована повторно.

Вот фрагмент кода.

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

Вы можете получить значение параметра, который вы передали в подслое, просто передав имя ключа параметра в качестве аргумента этой функции.

Надеюсь, это поможет.

...