demoshop

demo, trying to be the best_

ASP.NET MVC 動態變換 MasterPage

  • 2009-06-19 00:34:29
  • 8808

今天同事遇到一個需求,客戶說有其它機構想要利用iFarem技術載入他們的網站,但是因為是被載入的所以寬度會縮小,要求我們必須作到一個網站在被使用iFarem載入時自動縮小並且取消側邊欄的功能。

這需求一出馬上有人提出可以在頁面的 Page_Init 事件中寫 Code 來達到動態變換的功能 (MVC一樣是ASP.NET 所以還是有 Page_Init 的)但是我立刻反應說,寫在 Page_Init 的話以 MVC 的架構感覺不可能,因為吃到 Page_Init 的之前早已經決定了 MasterPage 的使用,好在這次沒有耽誤很多時間立刻找到了在 MVC 下的正確使用方式。


我們在 Return View 的時候就有參數可以設定 Master Name 了如以下寫法就是指定載入 Index而使用 M這個MasterPage

return View("Index", "m");  

 


既然知道了動態變換 Master Page 的方法那判斷是不是被載入就相對的簡單了,想像一下環境只要是被 iFarem 的頁面瀏覽器上的網址一定不會是我們的,有了這個依據就好判斷啦。

//先宣告主機位置
var referrer = HttpContext.Request.UrlReferrer;
 
//判斷是否為自己的網址
if (Convert.ToString(referrer).Contains("demo.tc"))
{
    //載入原始的 MasterPage
    return View("Index", "page");  
}
//載入專位farem設計的 MasterPage
return View("Index", "farem"); 

這樣子就可以滿足我們的需求了,其實也還滿簡單的。

 

原先是想用 QueryString 傳 Type 來決定是否為載入的頁面,但考量到要改寫部份太多而且使用者改到網址就破功而作罷,後來又想說利用JS來判斷但又因為擔心遊覽器關閉JS支援會破功也作罷,最後決定寫到 Controller 內這樣比較穩也不需要改變太多的 Code。

回應討論