Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何仅为ASP.NET网站的一个页面自定义用户控件?_C#_Asp.net - Fatal编程技术网

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

C# 如何仅为ASP.NET网站的一个页面自定义用户控件?,c#,asp.net,C#,Asp.net,我有两个用户控件(ascx);一个包含一些表单,另一个包含菜单栏 我在很多页面上都用到了这两个词。现在,我需要自定义一个有管理员主页菜单栏。因此,是否可以仅为此页面向用户控件添加一些更改 我指的是更改,在菜单栏中添加两个元素 例如,假设这两个页面被称为:Admin,Settings。您将如何为它们自定义用户控件 菜单用户控件(ascx文件)的我的代码: 在母版页中,我将: <uc1:MenuBar ID="MenuBar1" run

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

我在很多页面上都用到了这两个词。现在,我需要自定义一个有管理员主页菜单栏。因此,是否可以仅为此页面向用户控件添加一些更改

我指的是更改,在菜单栏中添加两个元素

例如,假设这两个页面被称为:Admin,Settings。您将如何为它们自定义用户控件

菜单用户控件(ascx文件)的我的代码:


在母版页中,我将:

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