IE6是一款老土的瀏覽器,這八年來推出的大多數新功能它都不支援,不過這款瀏覽器的使用者量仍然佔15-25%左右,這嚴重製約了瀏覽器技術的向前發展。 許多人都認為是時候徹底拋棄這款老土瀏覽器了,不過現在,有此想法的已經不僅僅是個人和一些非贏利性的組織,有幾家公司甚至已經聯合推出了一個呼籲人們拋 棄IE6的主題網站。
這個“邪惡的IE6”,我實在是受夠了他,嘿嘿(Google也是忍無可忍決定拋棄IE6),所以我也決定拋棄這個讓人頭疼不已的IE6,說做就做,誰讓我是行動派的呢。
在ASP.NET MVC2中實現禁止被IE6訪問其實非常簡單,我們只要擷取到用戶端瀏覽器的IE版本,然後再判斷這個版本號碼是不是6,如果是6那我們輸出事先準備好的頁面來提示使用者,更換其他瀏覽器。
剛開始我想用HttpModule來實現,可是弄了半天沒有弄明白,所以我決定放棄這個方案,改用ActionFilter來實現。(如果有高手知道怎麼弄請不吝賜教)。
ActionFilter能夠對Action進行過濾,在Actionfilter中我們可以實現禁止被IE6訪問,但是大家都知道ActionFilter只能被應用到Controller級或Action級,並沒有應用程式級的Filter,聽說MVC3將支援應用程式級的Filter,不管是不是真的,先來看看在MVC2中如何?。
首先我們需要自訂一個ActionFilter名字叫做CheckExplorerAttribute
public class CheckExplorerAttribute:ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (filterContext.HttpContext.Request.Browser.MajorVersion == 6)
{
ViewResult result=new ViewResult();
result.ViewName = "ExplorerError";
filterContext.Result = result;
}
}
}
這個ActionFilter在Action被執行前來判斷用戶端IE是否為IE6,如果是IE6則輸出部分視圖ExplorerError中的內容。
下面我們來看看ExplorerError中的內容。
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<dynamic>" %>
<h3>致XXX網使用者的一封信</h3>
<div>
<p>
親愛的使用者,當您看到這封信的時候,我們剛剛做出了一個非常艱難的決定。
</p>
<p>
在萬惡的IE6停止對廣大使用者和網站開發人員進行肆意蹂躪之前,我們決定拒絕使用IE6的使用者訪問我們的網站。
</p>
<p>
請您更換為其他的瀏覽器,以獲得更好的瀏覽效果,給你造成的不便我們深表遺憾!
</p>
<p>
最後我們送給廣大使用者一句忠告,“真愛生命,遠離IE6”!
</p>
</div>
為了是這個Filter能夠在整個應用程式中起作用我們需要自己定義一個Controller,這個Controller繼承自系統的Controller,然後為這個Controller添加剛才自訂的Filter上,不說廢話了,上代碼。
[CheckExplorer]
public class MyController:Controller
{
}
最後我們建立的每個Controller都自稱自這個MyController,這樣使用者不論訪問那個頁面都將看到我們自訂的那封信了,繼續上代碼。
public class HomeController : MyController
{
//
// GET: /Home/
public ActionResult Index()
{
return View();
}
}
OK,大功告成了,看。