在.NET MVC中Razor提供了一個語法,這種語法方便我們將View中的內容抽取出來,如此變成一個獨立的輔助方法以達到function reuse.
舉例來說,假設我們在View寫了一個分流的方法:
在.NET MVC中Razor提供了一個語法,這種語法方便我們將View中的內容抽取出來,如此變成一個獨立的輔助方法以達到function reuse.
舉例來說,假設我們在View寫了一個分流的方法:
//簡單的依據秒的奇偶數導到不同的對應網站
if((DateTime.Now.Second % 2) == 0)
{
Response.Redirect("http://www.google.com");
}
else
{
Response.Redirect("http://tw.yahoo.com");
}
假設在不同的頁面中我們都需要這個功能,我們可以將此Method抽取出來,用@helper的方式來進行封裝:
@helper RedirectToCorretPage()
{
//簡單的依據秒的奇偶數導到不同的對應網站
if((DateTime.Now.Second % 2) == 0)
{
Response.Redirect("http://www.google.com");
}
else
{
Response.Redirect("http://tw.yahoo.com");
}
}
@RedirectToCorretPage();
如此我們就可以簡單的將原本分流的功能用RedirectToCorretPage這個輔助方法來表示。
跨頁的@helper輔助方法
如果一個@helper輔助方法需要用在多個不同的view頁面裡,我們需要將此輔助方法放到App_Code目錄底下,而檔案副檔名需為cshtml;而檔名就會是我們的類別名稱:
此時我們在將完整的@helper內容放到該檔案中即可(這邊由於用到Response.Redirect,所以需要引用System.Web.Mvc這個命名空間; 而在頁面呼叫時用時,則僅要打上檔案(類別)名稱.方法即可使用。
@DispatchHelper.RedirectToCorretPage();
解決App_Code中不能使用MVC Helper Methods
在學習@helper時第一個拿來當作練習的題目是做子功能連結目錄,發現像@Html.ActionLink這種輔助Method似乎無法支援,Google了一下相關討論串,其實這個支援應該已經在VS 2013實作了,但我們需將原頁面的WebViewPage物件傳入,程式碼片段如下:
@helper ShowViewLabMenu(WebViewPage page)
{
@page.Html.ActionLink("[Help]", "Help", "Home")
@page.Html.ActionLink("[Back To List]", "Index", "Home")
}
當然,要加入System.Web.Mvc及System.Web.Mvc.Html兩個命名空間才能使用WebViewPage以及ActionLink。
@using System.Web.Mvc.Html
@using System.Web.Mvc
而在使用時範例如下
@MenuHelper.ShowViewLabMenu(this)