我尝试将一些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
是正确的还是我需要以不同的方式检查站点地图节点的可见性?
答案 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的依赖。