2011-11-14 56 views
3

我有兩個用戶控件(ascx);一個包含一些表單,另一個包含菜單欄。如何自定義ASP.NET網站的一個頁面的用戶控件?

我在很多頁面中都使用了它們。現在,我需要自定義具有管理主頁菜單欄的窗口。那麼,是否有可能僅爲此頁面添加一些用戶控件的更改。

我的意思是通過更改,將兩個元素添加到菜單欄。

例如,讓我們假設這兩個頁面被稱爲: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" /> 

正如你從上面的代碼中看到,我添加管理員頁面作爲列表中的最後一個元素,以及代碼隱藏類,我添加了下面提到的bool方法,但我不知道如何使最後一個元素僅對Admin而不是其他用戶可見

順便說一句,我使用ASP.NET基於角色的安全性,因爲我使用Windows身份驗證。這從普通用戶定義管理員。

回答

2

當然,

兩個項目添加到菜單欄,並隱藏他們的一切,但管理頁面。你可以用幾種方法來做到這一點;檢查當前請求的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 =「服務器」的李以顯示或隱藏:

<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"; 
} 

就是這樣的。

+0

你能否澄清你的代碼?對不起,我是ASP.NET和C#的初學者。讓我們假設這兩個頁面被稱爲:Admin,Settings。你將如何爲他們定製用戶控件? – user730077

+0

將此屬性添加到菜單用戶控件中;那麼您可以在管理頁面標記中將該屬性設置爲true,以顯示兩個新的菜單項。見上面,編輯迴應。 –

+0

感謝您的努力,並試圖幫助我。其實,我沒有明白你的意思。請看我編輯的問題,瞭解我的意思。 – user730077

1

你可以檢查在ASCX的Page_Load中的網址,並做了改動有

0

是的,你可以通過做有條件地渲染一些元素:

<% if(somecondition) { %> 
<li class="yourclass"> text here </li> 
<%}%> 
1

添加了新的元素,用戶控件並在控件中顯示屬性(例如bool ShowAdminMenuItems)。根據此屬性的值顯示/隱藏新元素。在需要顯示這兩個菜單項的頁面中將此屬性設置爲true。其餘的頁面不知道它,所以他們不會設置它,並且默認值(false)會影響。

相關問題