![](/img/trans.png)
[英]How can I get the parent page from a User Control in an ASP.NET Website (not Web Application)
[英]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.