2016-10-11 4 views
2

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

Пример здесь мое меню:

<ul> 
    <li id="link1" runat="server">Link 1</li> 
    <li id="link2" runat="server">Link 1</li> 
    <li id="link3" runat="server">Link 1</li> 
</ul> 

я могу легко написать что-то вроде:

if(User == "") { 

    link1.Visible = false; 
    link2.Visible = false; 
} 
link3.Visible = true; 

Но я хочу, чтобы использовать цикл для ссылки на элемент списка идентификаторов в массиве. Я пытаюсь заставить этот код работать: чтобы он читал link1.Visible = ... link2.Visible = ..., но я не могу использовать link.Visible таким образом. Как я могу сделать эту работу?

Большое спасибо

ArrayList links = bw.return_arr_qry("Links", "BW_AppPerms", "Ext_App = 1"); 

// Links array return "link1", "link2", "link3" etc... 

foreach(string link in links) 
{ 
    if (BW_Access.accessApp(link, "Read") == false) 
    { 
     link.Visible = false; 
    } 
} 
+0

Вы пытаетесь установить свойство 'Visible' переменной' string link', это, очевидно, невозможно. Вы должны использовать фактические веб-элементы управления. –

ответ

1

Добавить runat="server" в свой ul как это <ul runat="server" id="links"> тогда:

var Links = links.Controls.OfType<HtmlGenericControl>().ToArray(); 
foreach (HtmlGenericControl li in Links) 
{ 
    if (BW_Access.accessApp(li, "Read") == false) 
    { 
     li.Visible = false; 
    } 
} 

Или использовать это, если вы не хотите использовать версию LINQ:

foreach (Control li in links.Controls) 
{ 
    if (li is HtmlGenericControl) 
     li.Visible = false; 
} 
+0

Спасибо, но я получаю, что у Arraylist нет определения для элементов управления –

+0

@KarimAli Добавьте это 'using System.Web.UI.HtmlControls;' в ваши 'используемые' директивы. –

+0

@KarimAli А также это 'using System.Linq;' –

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