C# 如何仅为ASP.NET网站的一个页面自定义用户控件?
我有两个用户控件(ascx);一个包含一些表单,另一个包含菜单栏 我在很多页面上都用到了这两个词。现在,我需要自定义一个有管理员主页菜单栏。因此,是否可以仅为此页面向用户控件添加一些更改 我指的是更改,在菜单栏中添加两个元素 例如,假设这两个页面被称为:Admin,Settings。您将如何为它们自定义用户控件 菜单用户控件(ascx文件)的我的代码:C# 如何仅为ASP.NET网站的一个页面自定义用户控件?,c#,asp.net,C#,Asp.net,我有两个用户控件(ascx);一个包含一些表单,另一个包含菜单栏 我在很多页面上都用到了这两个词。现在,我需要自定义一个有管理员主页菜单栏。因此,是否可以仅为此页面向用户控件添加一些更改 我指的是更改,在菜单栏中添加两个元素 例如,假设这两个页面被称为:Admin,Settings。您将如何为它们自定义用户控件 菜单用户控件(ascx文件)的我的代码: 在母版页中,我将: <uc1:MenuBar ID="MenuBar1" run
在母版页中,我将:
<uc1:MenuBar ID="MenuBar1" runat="server" />
正如您从上面的代码中看到的,我添加了Admin页面作为列表中的最后一个元素,在代码隐藏类中,我添加了下面提到的bool方法,但是我不知道如何使最后一个元素只对管理员而不是其他用户可见
顺便说一句,我使用的是基于ASP.NET角色的安全性,因为我使用的是Windows身份验证。这将从普通用户定义管理员。当然
将这两个项目添加到菜单栏,并隐藏它们,但不包括管理页面。你可以通过几种方式做到这一点;检查当前请求的URL,或向用户控件添加属性(默认菜单项为false)
或者你可以用一种方法来做。属性允许您在标记或代码中设置它。例如,如果您的UC定义是:
<uc:Menu ID="ucMenu" runat="server" />
类似于此。您可以检查ascx页面加载中的url并在那里进行更改是的,您可以通过执行以下操作有条件地呈现某些元素:
<% if( somecondition) { %>
<li class="yourclass"> text here </li>
<%}%>
此处的文本
将新元素添加到用户控件中,并在控件中公开一个属性(例如boolshowadmenuitems
)。基于此属性的值显示/隐藏新元素。在需要显示这两个菜单项的页面中将此属性设置为true。其他页面不知道,因此他们不会设置它,默认值(false)将生效。请澄清您的代码好吗?对不起,我是ASP.NET和C的初学者。让我们假设这两个页面被称为:Admin,Settings。如何自定义用户控件?将此属性添加到菜单用户控件;然后,您可以在显示两个新菜单项的管理页面标记中将属性设置为true。请参阅上面编辑的回复。感谢您的努力和帮助。事实上,我不明白你的意思。请看我编辑的问题,了解我的意思。布莱恩,非常感谢你的帮助。我真的很感激。顺便说一下,我在解释我的问题时犯了一个错误。到目前为止,我没有应用角色安全性,因为我有很多方法来定义规则。目前,我正在考虑使用你的第一种方法。我在母版页中的用户控件和菜单用户控件的代码隐藏类中添加了DisplayAdminOnlyMenuItems。现在,我有了所有页面中包含所有选项的菜单。如何在菜单中隐藏除管理页面以外的所有页面中的管理元素。对不起,误会你了。
<uc:Menu ID="ucMenu" runat="server" />
<uc:Menu ID="ucMenu" runat="server" DisplayAdminOnlyMenuItems="True" />
<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";
}
<% if( somecondition) { %>
<li class="yourclass"> text here </li>
<%}%>