import System.Web.Mvc.UrlHelper
正常狀況我在一個 view 頁面使用 UrlHelper 時都是可正常動作的,如下
Index.cshtml
@{
ViewBag.Title = "Home Page";
}
@Url.Action("About")
畫面為
但現我在 App_Code 裡面使用 UrlHelper 卻失敗了,如下
資料結構為
Index.cshtml 改為
@{
ViewBag.Title = "Home Page";
}
@Print.ShowPath("About")
Print.cshtml 為
@helper ShowPath(string pathName)
{
Url.Action(pathName);
}
出現了這種錯誤訊息「The name 'Url' does not exist in the current context」
因為 UrlHelper 沒有被 include 進來,那就手動來呼叫 UrlHelper 吧
將 Print.cshtml 改為
@using System.Web.Mvc;
@helper ShowPath(string pathName)
{
UrlHelper myUrlHelper = new UrlHelper(Request.RequestContext);
<p>
@myUrlHelper.Action(pathName)
</p>
}
將 Print.cshtml 改成這樣也是成立的
@using System.Web.Mvc;
@helper ShowPath(string pathName)
{
UrlHelper myUrlHelper = new UrlHelper(HttpContext.Current.Request.RequestContext);
<p>
@myUrlHelper.Action(pathName)
</p>
}
看有人這麼寫也行,但我還是不太知道其原理,如下
新增 HelperBase.cs 於 App_Code 資料夾內
HelperBase.cs 內容為
using System.Web.WebPages;
using System.Web.Mvc;
namespace WebApplication1.App_Code
{
public class HelperBase : HelperPage
{
public static new HtmlHelper Html
{
get { return ((WebViewPage)WebPageContext.Current.Page).Html; }
}
public static UrlHelper Url
{
get { return ((WebViewPage)WebPageContext.Current.Page).Url; }
}
}
}
於 Print.cshtml 裡繼承 HelperBase
@inherits WebApplication1.App_Code.HelperBase
@helper ShowPath(string pathName)
{
<p>
@Url.Action(pathName)
</p>
}
參考資料: