【问题标题】:Visible list item可见列表项
【发布时间】:2016-10-11 13:57:15
【问题描述】:

我正在使用列表来显示菜单并尝试将菜单项限制为某些用户。

这里是我的菜单示例:

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

但我想使用循环来引用数组中的列表项 ID。 我正在尝试使这段代码工作:所以它应该阅读 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;
    }
}   

【问题讨论】:

  • 您试图设置string link 变量的Visible 属性,这显然是不可能的。您必须使用实际的 Web 控件。

标签: c# asp.net arrays loops foreach


【解决方案1】:

runat="server" 添加到您的ul,就像这样&lt;ul runat="server" id="links"&gt; 然后:

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

【讨论】:

  • 谢谢,但我得到 Arraylist 没有控件的定义
  • @KarimAli 将此using System.Web.UI.HtmlControls; 添加到您的using 指令中。
  • @KarimAli 还有这个using System.Linq;
  • @KarimAli 这是一个有效的答案。我敢肯定,如果您已将这两个 using 添加到 C# 页面顶部的 using 指令中,它应该可以完全按照您的意愿工作。可能你在这里错过了什么。
  • @KarimAli 查看我的更新答案。当您检查我的答案时,也有一个错字。我将if (BW_Access.accessApp(link, "Read") == false) 更改为if (BW_Access.accessApp(li, "Read") == false)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-25
  • 2015-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多