2013-07-10 67 views
0

我想啓用或禁用基於CssClass的ASP.NET控件,例如我爲ASP.NET頁面中的一個按鈕設置插入CssClass,並檢查用戶是否有權執行如果用戶有權限插入我會啓用按鈕,如果沒有,我會禁用按鈕。啓用或禁用基於CssClass的ASP.NET WebForms控件

請注意我想編寫應用DRY的邏輯我不想在每個頁面中編寫代碼。

我有2個場景在我的腦海:

1 - 選擇代碼隱藏使用C#的控制,但我在這一個困難,我使用BaseClass的方法Web.UI.Page - > BaseClass的 - > MasterPage - > Page I使用下面的代碼片段,它總是返回空this.Controls.OfType<WebControl>().Where(i => i.CssClass == "insert"),因爲這將只在BaseClass中選擇控件。

2 - 創建WebMethod以從後面的代碼中選擇權限並使用jQuery按類選擇元素,並根據權限啓用或禁用它們。

請給我你的意見,並告訴我是否有什麼問題。

回答

2

如果您希望(必須)使用CssClass屬性隱藏它們,則最好在服務器上,在您的基類中執行它,如場景1中所述。但是請記住this.Controls只是一個級別在控制樹中。如果您希望包含所有控件,則需要遞歸掃描控件樹。爲了在動態內容上實現此目的(例如在ListView等中生成ItemTemplates),您需要確保在呈現所有內容時執行此操作。

在客戶端上這樣做是不推薦,因爲它不是很難惡意用戶只需打開開發工具,並顯示插入按鈕再次

然而,你或許應該考慮CssClass屬性的目的。它不適合你想要做的事情;它真的打算應用樣式。

如果您正在使用ASP.NET的成員資格提供和它的角色提供,您可以使用asp:LoginView限制渲染,像這樣:

<asp:LoginView runat="server"> 
    <RoleGroups> 
     <asp:RoleGroup Roles="CanInsert"> <!--Roles can be anything--> 
      <ContentTemplate> 
       <!--Insert button or w/e here--> 
      </ContentTemplate> 
     </asp:RoleGroup> 
    </RoleGroups> 
</asp:LoginView> 

如果你不使用內置的成員資格提供滾動你自己LoginView並不是特別困難,這使事情變得非常乾燥又容易改變

+0

我不使用內置的成員資格的供應者,我已經做了方案1號和它的工作的感謝@Christoffer曼斯菲爾德 –

0

如果u想從服務器端做u有很多方式做到這一點

1-創建2個CSS類一個用於隱藏另一個用於展示,然後在contorl的頁面負載變化的CSS

* - 當u在頁面加載時,所有控件呈現監守得到選擇您的peroperty爲的CssClass

您的問題改變csscalass財產u能找到從表單控件從分層的ContentPlaceHolder

但你可以隱藏你的控制從母版頁acording permision每個頁面加載

相關問題