2010-07-19 62 views
1

我有一些頁面的內容與登錄用戶和未登錄用戶都有關。例如,包含聯繫信息,隱私政策等的頁面。所有頁面都有典型的導航菜單,但用戶通常會登錄到與未登錄用戶相同的導航菜單欄。向可能會看到不同母版頁的不同用戶顯示相同內容(ASP.net)

在ASP.net中這樣做的最佳方法是什麼?

到目前爲止,可能的解決方案包括以下內容:

  1. 使用彈出窗口中顯示的內容。該頁面將不包含菜單,只是一些基本頁面不需要檢查哪種類型的用戶正在看到它。
  2. 根據用戶是否通過身份驗證,以編程方式更改母版頁。但是,其中一個母版頁上有一些變量需要訪問,但未被登錄的用戶觸及。
  3. 將內容放在用戶控件中,並將此用戶控件粘貼到兩個單獨的頁面上以顯示給相應的用戶。

我不是#1粉絲,因爲第一次訪問該網站的用戶可能有某種類型的彈出式窗口攔截器或已禁用JavaScript。

我知道#2可以讓頁面使用某種從MasterPage繼承的基類。然而,我讀過這可能不是最好的設計,因爲現在有一個頁面可以訪問並非真正必要的變量。

第三種方法聽起來很合理,但後來會有兩個獨立的ASPX文件。

有沒有適當的方法來做到這一點?或者我還沒有想過的另一種方法?

編輯

爲了澄清,登錄用戶需要設置某些變量在非登錄用戶自己的母版頁沒有。原因是有一個用戶控件顯示一個特殊的導航菜單,它將根據這些變量突出顯示某些項目。

例如,用戶控件需要一個字符串來確定要突出顯示哪個項目。包含個人資料信息的頁面將提供「個人資料」作爲參數,以突出顯示菜單上的「個人資料」項目。

用戶控件中的菜單是根據數據庫中的數據動態生成的。菜單項目按類別分組,並用從數據庫中提取的適當標題顯示。

回答

1

可編程改變母版頁很容易;只需提供pre init上的正確URL即可,設置爲

protected override void OnPreInit(..) 
{ 
    if (this.User != null) { 
     if (this.User.Identity.IsAuthenticated) 
      this.MasterPageFile = "~/loggedin.master"; 
     else 
      this.MasterPageFile = "~/notloggedin.master"; 
    } 
} 

沒有所需的基類。

用戶控制方法也可以,但改變母版頁文件是很容易做到的。

編輯:如果你有屬性來設置或從主,你可以讓代碼隱藏文件實現接口,並檢查是否這。主引用是該接口類型。

HTH。

+0

我忘了指出,登錄的用戶需要在非登錄用戶不需要的母版頁(即頁面標題等)中設置某些變量。我編輯了我的問題。 – Michael 2010-07-19 15:52:28

+0

那麼,每個母版頁都定義了它自己的一組參數,還是它們在所有X個母版頁中都是共同的? – 2010-07-19 17:44:00

+0

我目前有3個主頁。有一個包含通用佈局的基礎母版頁。還有2個嵌套母版頁。其中一個嵌套頁面是爲非登錄用戶設計的,並嚴格佈局。另一個是登錄用戶,它需要某些參數。 我正在考慮的頁面是顯示給登錄用戶和未登錄用戶的頁面。如果可能的話,我真的不想複製任何東西。我想知道方法#2是否可能是這裏的方法。 – Michael 2010-07-19 17:52:10

相關問題