2016-05-09 4 views
0

Я собрал это вместе из разных мест. То, что я пытаюсь сделать, это показать или скрыть собственный тип страницы, основанный на роли пользователя, и вариант со стороны администратора (visibiltyType).Синтаксис преобразования трансформации Kentico

До сих пор, похоже, он работает, но я не уверен в том, что синтаксис синтаксиса является лучшим. C# не моя сильная сторона.

Вот моя трансформация:

<script runat="server"> 
 
    public bool visibility; 
 
    public string visiblityType; 
 
    protected override void OnDataBinding(EventArgs e) 
 
    { 
 
     visiblityType = Eval("Visibility").ToString(); 
 
     if(CMS.Membership.MembershipContext.AuthenticatedUser.IsInRole("scona-cms_resources_branchdirectors", CMS.SiteProvider.SiteContext.CurrentSiteName) && visiblityType == "ncp"){ 
 
     alert.Visible = true; 
 
     } 
 
     if(CMS.Membership.MembershipContext.AuthenticatedUser.IsInRole("scona-cms_resources_salesreps", CMS.SiteProvider.SiteContext.CurrentSiteName) && visiblityType == "ncp"){ 
 
     alert.Visible = true; 
 
     } 
 
     if(CMS.Membership.MembershipContext.AuthenticatedUser.IsInRole("scona-kff-headoffice", CMS.SiteProvider.SiteContext.CurrentSiteName) && visiblityType == "ncp"){ 
 
     alert.Visible = true; 
 
     }  
 
     if(CMS.Membership.MembershipContext.AuthenticatedUser.IsInRole("scona-cms_resources_partnernetwork", CMS.SiteProvider.SiteContext.CurrentSiteName) && visiblityType == "cp"){ 
 
     alert.Visible = true; 
 
     }  
 
     if (visiblityType == "both"){ 
 
     alert.Visible = true; 
 
     }  
 
     
 
    } 
 
</script> 
 
<asp:placeholder id="alert" runat="server" Visible="false"> 
 
    <li><%# Eval("Visibility") %> | <%# Eval("AlertDate") %> - <%# Eval("AlertTitle") %> <%# IfEmpty(Eval("AlertCopy"),"", " <a href='" + GetDocumentUrl() + "'>Read More</a>") %></li> 
 
</asp:placeholder>

+0

Можете ли вы попытаться переопределить метод OnLoad вместо OnDataBinding? – Enn

+0

Это убило страницу. Однако не уверен в ошибке. –

ответ

0

Это, кажется, работает на моем конце:

<script runat="server"> 
    protected override void OnLoad(EventArgs e) 
    { 
     alert.Visible = true; 
    } 
</script> 

<asp:placeholder id="alert" runat="server" visible="false"> 
    Placeholder 
</asp:placeholder> 

Однако в вашем случае я бы рекомендовал, чтобы переключиться на Текст/XML преобразование, потому что его более эффективно/быстрее, и вам будет намного легче написать такие условия. В вашем случае это было бы так хорошо, как это пишет:

{% if(CurrentUser.IsInRole("Editors")){ %} 

User is in role editors 

{% } else { %} 

user is not in editors role 

{% }%} 

Это, конечно, может быть более сложным, и вы могли бы даже написать метод пользовательских макросов для этой цели, но вы получите идею :)

+0

Возможно, вам понадобится предоставить больше доказательств Ричарду о скорости и эффективности, потому что Kentico специально заявил, что один не быстрее, чем другой. Фактически, стандартное преобразование ascx вполне можно было бы считать более быстрым, потому что оно не должно обрабатываться с помощью механизма макросов (это код C# в любом случае). Другое дело, если вы проверите это преобразование, вы можете скомпилировать преобразование ascx, и вы не можете сделать это с помощью текстового преобразования. Это очень удобно для апгрейдов. –

1

Вы можете настроить разрешения типа страницы и избежать всех проверок в вашей трансформации.

+0

Первая итерация этих разрешений. он работал, пока не возникла необходимость выборочно показать это нескольким группам. Мы заметили, что редакторы только создавали элемент один раз, а не столько, сколько нужно для групп. Я согласен, что утверждения условий беспорядочны, но роли AD здесь не чисты. –

Смежные вопросы