簡體   English   中英

如何自定義ASP.NET網站的一個頁面的用戶控件?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM