ASP.NET MVC 如何判斷現在是哪一頁
- 2009-05-08
- 21699
- 0
我們在製作網頁的時候一定會有不少重複的頁面,以往我們可以利用UserControl來處理在MVC內也有不過不是稱為UserControl我們叫它 Partialview ,如果只是載入重複的靜態頁面當然是很容易的,但往往我們需要判斷這PartialView是被誰呼叫的來動態改變一些顯示值,如果只是判斷網址已經不符合ASP.NET MVC的玩法,因為他本來就帶有一個強大的url重寫機制,呈現的網址不一定是真的,因此我們要判斷的來源一定必須要從Controller和Action來下手。
很簡單得來介紹一下因為這種需求通常屬於 〔顯示邏輯〕因此demo經常性的把它寫在 View 內,在 View 的前面這樣子寫
<%string CurrentAction = ViewContext.RouteData.Values["action"].ToString();%> <%string CurrentController = ViewContext.RouteData.Values["controller"].ToString();%>
後續就可以利用以下的 Code 來判斷是否為 某一個 Action
<%if (CurrentAction == "News") {%> <%=Html.ImageLink("Index", "~/Images/icon01.gif", "", new { controller = "ooxx" })%> <% }%>
當然這樣子寫是可以達到我們的需求沒錯,但對於經常性的判斷 demo 還是建議各位寫成一個 Helper 來處理, View 才不會顯得太亂
using System; using System.Web.Mvc; namespace Helpers { public static class IsCurrentActionHelper { public static bool IsCurrentAction(this HtmlHelper helper, string actionName, string controllerName) { string currentControllerName = (string)helper.ViewContext.RouteData.Values["controller"]; string currentActionName = (string)helper.ViewContext.RouteData.Values["action"]; if (currentControllerName.Equals(controllerName, StringComparison.CurrentCultureIgnoreCase) && currentActionName.Equals(actionName, StringComparison.CurrentCultureIgnoreCase)) return true; return false; } public static bool IsCurrentPage(this HtmlHelper helper, string actionName, string controllerName, string IdName) { string currentControllerName = (string)helper.ViewContext.RouteData.Values["controller"]; string currentActionName = (string)helper.ViewContext.RouteData.Values["action"]; string currentIdName = (string)helper.ViewContext.RouteData.Values["id"]; if (currentControllerName.Equals(controllerName, StringComparison.CurrentCultureIgnoreCase) && currentActionName.Equals(actionName, StringComparison.CurrentCultureIgnoreCase) && currentIdName.Equals(IdName, StringComparison.CurrentCultureIgnoreCase)) return false; return true; } } }
上面這段 code 因為 demo 需求要判斷出某一頁面才要處理的部份,因此多加上了對於 id 的判斷,這樣就可以準確的判斷出是否為同一頁。
在 ASP.NET MVC 的架構下,我們不免還是需要在 View 內寫 Code ,有些人認為這樣很亂或是很髒,demo的想法是〔顯示邏輯〕本來就應該出現在 顯示(View)內,所以這樣寫沒什麼不妥,而且當你知道此類型的判斷式會重複遇到的時候,就應該要把它寫成 Helper 養成這好習慣是絕對有利的。
回應討論