Razor Views中的HttpContext

时间:2011-03-21 12:43:33

标签: asp.net-mvc-3 razor

我尝试将一些ASPX标记移植到Razor,但编译器抛出错误。

ASPX(工作正常):

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

CSHTML(抛出错误):

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

参数1:无法从'System.Web.HttpContextBase'转换为'System.Web.HttpContext'

如何在Razor视图中引用HttpContext?使用HttpContext.Current是正确的还是我需要以不同的方式检查站点地图节点的可见性?

3 个答案:

答案 0 :(得分:11)

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

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

答案 1 :(得分:2)

是的,您可以使用HttpContext.Current。这将使您能够访问请求和响应数据。

答案 2 :(得分:2)

@Martin意味着您可以在Node类上编写一些扩展方法(无论其类型是什么),例如:

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

并在您的视图中使用它,如:

@if(node.IsAccessibleToUser()) {}

从而在视图中删除对HttpContext的依赖。