如何仅为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身份验证。
当然,
将这两个项目添加到菜单栏,并将它们隐藏在除了管理页面之外的所有内容中。你可以通过几种方式做到这一点;检查当前请求的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>
<%}%>