2011-03-21 57 views
3

我試圖將一些ASPX標記移植到Razor,但編譯器拋出一個錯誤。Razor Views中的HttpContext

ASPX(正常工作):

<% if (node.IsAccessibleToUser(Context)) { %> 
    // markup 
<% } %> 

CSHTML(拋出一個錯誤):

@if (node.IsAccessibleToUser(Context)) { 
    // markup 
} 

參數1:無法從 'System.Web.HttpContextBase' 轉換爲「System.Web程序。 HttpContext'

如何在Razor視圖中獲取對HttpContext的引用?是否正確使用HttpContext.Current或我需要以不同方式檢查站點地圖節點可見性?

回答

11

WebViewPage.Context是HttpContextBase實例。 WebViewPage.Context.ApplicationInstance.Context是HttpContext實例。

@if (node.IsAccessibleToUser(Context.ApplicationInstance.Context)) { 
    // markup 
} 
1

是的,你可以使用HttpContext.Current。這將使您可以訪問請求和響應數據。

+1

您可以使用它,但我會建議在您的控制器中使用它,或者創建一個HTML助手。 – Martin 2011-03-21 13:02:56

+0

@Martin,你能否澄清一下Controller/HtmlHelper? – altso 2011-03-21 13:48:44

2

@馬丁的意思是,你可以寫上你的節點類的一些推廣方法(無論那類型的),如:

public static class NodeExtensions 
{ 
    public static bool IsAccessibleToUser(this Node node) 
    { 
     // access HttpContext through HttpContext.Current here 
    } 
} 

,並用它在你的觀點一樣:

@if(node.IsAccessibleToUser()) {} 

因此在您的視圖中刪除對HttpContext的依賴。