ASP.NET MVC 動態變換 MasterPage
- 2009-06-19
- 17546
- 0
今天同事遇到一個需求,客戶說有其它機構想要利用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。
回應討論