0

我要做的是在管理员在导航部分中登录时使列表项可见。我无法使用 AD,所以我可以使用角色,所以我使用 SQL Server 来控制哪些用户可以访问什么。我找到了一种在管理员登录后使列表项可见的方法,但为此,我必须在无序列表中使用 runat="server"。一旦我使用它,我用于导航的 css 格式就不再存在了。我怎样才能解决这个问题并实现我想做的事情?这是我在母版页中的代码..

<section runat="server" id="login">
   <asp:LoginView id="loginview" runat="server" ViewStateMode="Disabled">
      <LoggedInTemplate>
         <p id="paragraph">
            Welcome,
            <asp:LoginName ID="loginName" runat="server" CssClass="username" />
            </a>!
            <asp:LoginStatus runat="server" LogoutAction="Redirect" LogoutText="Log off" LogoutPageUrl="~/Account/Login.aspx" />
            <ul runat="server" id="menu">
               <li><a href="~/Dashboard.aspx">Dashboard</a></li>
               <li><a runat="server" href="~/DeliveredDeals.aspx">Delivered Deals</a></li>
               <li><a runat="server" href="~/DealTracking.aspx">Deal Tracking</a></li>
               <li><a runat="server" id="allUsers" href="~/Users.aspx" visible="false">Users</a></li>
            </ul>
         </p>
      </LoggedInTemplate>
   </asp:LoginView>
</section>

这就是我设置它的方式。runat="server"从 中删除后,<ul>我将无法再查看新的列表项 (allUsers),但格式又回来了。任何建议表示赞赏。谢谢。

这是css..

/* login
----------------------------------------------------------*/
#login {
    display: block;
    font-size: .85em;
    margin: 0 0 10px;
    text-align: right;
}

    #login a {
        background-color: #d3dce0;
        margin-left: 10px;
        margin-right: 3px;
        padding: 2px 3px;
        text-decoration: none;
    }

    #login a.username {
        background: none;
        margin-left: 0px;
        text-decoration: underline;
    }

    #login ul {
        margin: 0;
    }

    #login li {
        display: inline;
        list-style: none;
    }


/* menu
----------------------------------------------------------*/
ul#menu {
    font-size: 1.3em;
    font-weight: 600;
    margin: 0 0 5px;
    padding: 0;
    text-align: right;
}

    ul#menu li {
        display: inline;
        list-style: none;
        padding-left: 15px;
    }

        ul#menu li a {
            background: none;
            color: #999;
            text-decoration: none;
        }

        ul#menu li a:hover {
            color: #333;
            text-decoration: none
        }
4

3 回答 3

1

If you add runat="server" ASP.NET will add a prefix to your ID which will most likely break the CSS

For Example :

If you place your element in <asp:Content ID="Content3" ContentPlaceHolderID="MainContent" runat="server"><asp:Content>

It will change <ul runat="server" id="menu"> to <ul id="MainContent_menu">

So check the page source then adjust your CSS.

于 2013-08-05T19:28:15.143 回答
1

由于您使用runat="server",ID 将通过 ASP.NET 进行修改,从而导致您的 css 问题。您应该更改您ul的使用类,而不是根据 id 对其进行样式设置。

<ul runat="server" class="menu">
    <!--Html-->
</ul>

CSS:

/* menu
----------------------------------------------------------*/
 ul.menu {
    font-size: 1.3em;
    font-weight: 600;
    margin: 0 0 5px;
    padding: 0;
    text-align: right;
}
ul.menu li {
    display: inline;
    list-style: none;
    padding-left: 15px;
}
ul.menu li a {
    background: none;
    color: #999;
    text-decoration: none;
}
ul.menu li a:hover {
    color: #333;
    text-decoration: none
}
于 2013-08-05T19:43:43.827 回答
1

您还可以考虑为此目的使用 css 类而不是 ID。然后您不必担心 .NET 会动态地将名称添加到元素的样式设置部分,从而使 css 更易于处理。

换句话说,应该看起来像这样:

<ul runat="server" class="menu">
    <li>lorem ipsum</li>
</ul>
于 2013-08-05T19:44:48.753 回答