繁体   English   中英

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

[英]How to customize the user control for only one page of the ASP.NET website?

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

我在很多页面中都使用了它们。 现在,我需要自定义具有Admin Homepage菜单栏的那个。 那么,是否可以为此页面添加一些用户控件的更改。

我的意思是通过更改,在菜单栏中添加两个元素。

例如,让我们假设这两个页面被调用: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方法,但我不知道如何使最后一个元素只显示为管理员而不是其他用户

顺便说一句,我使用ASP.NET基于角色的安全性,因为我使用的是Windows身份验证。 这将从普通用户定义管理员。

当然,

将两个项目添加到菜单栏,并为管理页面以外的所有内容隐藏它们。 你可以用几种方式做到这一点; 检查当前请求的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" />

然后它将使这些菜单项可见。

编辑 :在您的情况下,因为一切都是角色安全性,将runat =“server”添加到LI以显示或隐藏:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM