隐藏代码隐藏中的多个<li>列表项</li>

时间:2013-06-01 07:33:19

标签: c# asp.net html-lists

我的主页中有一个非常庞大的无序列表项。说它包含60多个列表项。根据某些条件,我想隐藏列表项(隐藏项目可以是1到59)

我的主文件代码段:

<li><a href="#">Authorization</a>
    <ul>
        <li><a href="NewCardGeneration.aspx"><span>Card Request</span></a></li>
        <li><a href="cardIssueAuth.aspx"><span>Card Issue</span></a></li>
        <li><a href="CardReloadAuth.aspx"><span>Card Reload</span></a></li>
        <li><a href="CloseCardAuth.aspx"><span>Close Card</span></a></li>
        <li><a href="CardReplacementAuth.aspx"><span>Card Replacement</span></a></li>
        <li><a href="CardStatuschangeAuth.aspx"><span>Card Status Change</span></a></li>
        <li><a href="UpgradeDowngradeAuth.aspx"><span>Upgrade/DownGrade</span></a></li>
    </ul>
</li>

条件: -

我的DataTable会返回

之类的值
cardIssueAuth.aspx
Distributor.aspx
CardStatuschangeAuth.aspx
UpgradeDowngradeAuth.aspx

所以我只想隐藏DataTable

中出现的那些页面

我知道ID&amp; runat的{​​{1}}属性然后将它<li>

但我如何有效/动态地使用它?通过使用一些for循环...... !!

2 个答案:

答案 0 :(得分:1)

我个人不喜欢'可见性'黑客。您可以根据DataTable上的条目,在服务器端本身(通过代码隐藏或scriptlet)有选择地呈现“li”元素。

在代码隐藏中,您可以拥有一个静态字典,其中包含按部分分组的所有链接详细信息。加上过滤逻辑:

        var sections = new List<Section>()
                           {
                               new Section()
                                   {
                                       Header = "Authorization",
                                       SubLinkDetails = new Dictionary<string, string>()
                                                        {
                                                            {"NewCardGeneration.aspx", "Card Request"},
                                                            {"cardIssueAuth.aspx", "Card Issue"},
                                                            //.. and so on
                                                        }
                                   }
                               //.. other sections follow
                           };

        //filter subLinkDetails depending on the DataTable entries
        sections.ForEach(s => s.SubLinkDetails.RemoveWhere(k => DataTable.Contains(k)));

这里,Section是一个便利类,RemoveWhere是IDictionary上的扩展方法:

    class Section
    {
        public string Header { get; set; }
        public IDictionary<string,string> SubLinkDetails { get; set; }
    }
    public static class IDictionaryX
    {
        public static void RemoveWhere<K,V>(this IDictionary<K,V> dictionary, Predicate<K> condition)
        {
            IEnumerable<K> keysToRemove = dictionary.Keys.Where(k => condition(k));
            foreach (var k in keysToRemove)
            {
                 dictionary.Remove(k);
            }
        }
    }

在您的aspx中,访问这些部分并渲染ul / li元素:

        <%foreach (var section in sections)
        {%>
            <li><a href="#"><%=section.Header %></a>
            <%foreach (var filteredLink in section.SubLinkDetails)
            {%>
                <li><a href="<%= filteredLink.Key>"><span>"<%= filteredLink.Value>"</span></a></li>
            <%}%>
            </li>
        <%}%>

答案 1 :(得分:0)

根据页面名称为您的<li>提供ID。

然后,

您可以通过

执行此操作
if (listItem.selectedItem == 'pagename.aspx')
    this.hide.style.Add("display", "none");