2011-11-14 22 views
3

我有两个用户控件(ascx);一个包含一些表单,另一个包含菜单栏。如何自定义ASP.NET网站的一个页面的用户控件?

我在很多页面中都使用了它们。现在,我需要自定义具有管理主页菜单栏的窗口。那么,是否有可能仅为此页面添加一些用户控件的更改。

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

例如,让我们假设这两个页面被称为: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" /> 

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

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

回答

2

当然,

两个项目添加到菜单栏,并隐藏他们的一切,但管理页面。你可以用几种方法来做到这一点;检查当前请求的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 =“服务器”的李以显示或隐藏:

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

就是这样的。

+0

你能否澄清你的代码?对不起,我是ASP.NET和C#的初学者。让我们假设这两个页面被称为:Admin,Settings。你将如何为他们定制用户控件? – user730077

+0

将此属性添加到菜单用户控件中;那么您可以在管理页面标记中将该属性设置为true,以显示两个新的菜单项。见上面,编辑回应。 –

+0

感谢您的努力,并试图帮助我。其实,我没有明白你的意思。请看我编辑的问题,了解我的意思。 – user730077

1

你可以检查在ASCX的Page_Load中的网址,并做了改动有

0

是的,你可以通过做有条件地渲染一些元素:

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

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

相关问题