如何仅为ASP的一个页面自定义用户控件.网的网站

本文关键字:自定义 用户 一个 控件 网站 何仅 ASP | 更新日期: 2023-09-27 18:14:26

我有两个用户控件(ascx);一个包含一些表单,另一个包含菜单栏。

我在许多页中都使用了它们。现在,我需要自定义一个有菜单栏的管理主页。那么,是否可以为这个页面添加一些用户控件的更改呢?

我指的是更改,在菜单栏中添加两个元素。

例如,让我们假设这两个页面分别叫做Admin和Settings。如何为它们定制用户控件?

我的菜单用户控件代码(ascx文件):

<div class="topnav">
            <ul class="menu" runat="server" >
                <li><a href="Default.aspx">Home</a></li>
                <li><a href="#">Sub-Menu1</a>
                    <ul>
                        <li><a href="#">Item</a></li>
                        <li><a href="#">Item</a></li>
                        <li><a href="#">Item</a></li>
            <li><a href="#">Item</a></li>
                    </ul>
                </li>
                <li><a href="#x">Sub-Menu2</a>
                    <ul>        
                        <li><a href="#">Item</a></li>
                        <li><a href="#">Item</a></li>
                        <li><a href="#">Item</a></li>
                        <li><a href="#">Item</a></li>
                        <li><a href="#">Item </a></li>
                        <li><a href="#">Item</a></li>
                        <li><a href="#">Item</a></li>
                    </ul>
                </li>
                <li><a href="#">ITEM</a></li>
                <li><a href="About.aspx">About</a></li>
                <li><a href="Contact.aspx">Contact Us</a></li>
                <li><a href="#">Help</a></li>
                <li class="menuItem1ToHide"><a href="#">Admin</a></li>
            </ul>
            <div class="clr"></div>
          </div>

在母版页里面,我放了:

<uc1:MenuBar ID="MenuBar1" runat="server" />

正如您从上面的代码中看到的,我添加了Admin页面作为列表中的最后一个元素,以及代码隐藏类,我添加了下面提到的bool方法,但我不知道如何使最后一个元素仅对Admin可见,而不是对其他用户可见

顺便说一下,我正在使用ASP。. NET基于角色的安全,因为我使用的是Windows身份验证。

如何仅为ASP的一个页面自定义用户控件.网的网站

当然,

将这两个项目添加到菜单栏,并将它们隐藏在除了管理页面之外的所有内容中。你可以通过几种方式做到这一点;检查当前请求的URL,或者向用户控件添加属性(默认菜单项为false)。

public bool DisplayAdminOnlyMenuItems
{
  get { return menuItem1ToHide.Visible; }
  set
  {
     menuItem1ToHide.Visible = value;
     menuItem2ToHide.Visible = value;
  }
}

或者你可以用一个方法来做。该属性允许您在标记或代码中设置它。例如,如果您的UC定义是:

<uc:Menu ID="ucMenu" runat="server" />

对于管理页面,可以这样设置:

<uc:Menu ID="ucMenu" runat="server" DisplayAdminOnlyMenuItems="True" />

然后它会使这些菜单项可见

EDIT:在您的情况下,由于所有内容都是角色安全性,因此在LI中添加runat="server"以显示或隐藏:

<li id="liAdmin" runat="server" class="menuItem1ToHide"><a href="#">Admin</a></li>

在您的代码中,在用户控件的呈现器上,执行:

protected override void OnPreRender(EventArgs e)
{
    liAdmin.Visible = this.User.IsInRole("Admin");
    //if visible isn't available, use style["display"] = (this.User.IsInRole("Admin") ? "" : "none";
}

差不多。

您可以在ascx的Page_Load中检查url并在那里进行更改

将新元素添加到用户控件并在控件中公开属性(例如bool ShowAdminMenuItems)。根据该属性的值显示/隐藏新元素。在需要显示这两个菜单项的页面中,将此属性设置为true。其他页面不知道它,所以他们不会设置它,默认值(false)将生效。

是的,您可以通过以下方式有条件地呈现某些元素:

<% if( somecondition) { %>
<li class="yourclass"> text here </li>
<%}%>