【问题标题】:Request.QueryString cannot be used in this wayRequest.QueryString 不能这样使用
【发布时间】:2015-12-29 16:58:24
【问题描述】:

我正在尝试使用第二个函数从 Url 中检索值。第一个函数函数传入 checkedValue 变量,第二个函数应该检查类别是否存在以及是否返回值。

Imports System.Web.HttpRequest

Public Class ReviewPageDefault
Inherits Page

Shared Function GetProductId()

    Dim util As New Utilities

    Dim product = ""

    If util.CheckString("schoolid") = "" And util.CheckString("stockid") = "" Then
        product = (util.CheckString("stock"))
    ElseIf util.CheckString("stock") = "" And util.CheckString("stockid") = "" Then
        product = (util.CheckString("FN"))
    Else
        Dim stockId = util.CheckString("stockid")
        product = stockId
    End If
    Return product

End Function

End Class

Public Class Utilities
Inherits Page

Public Function CheckString(checkedValue As String)

    Dim check = ""
    If Request.QueryString(checkedValue) Is Nothing Then
    Else
        check = Request.QueryString(checkedValue)
    End If
    Return check

End Function

End Class

但是,每当我尝试测试页面时,我都会收到错误

System.Web.HttpException: Request is not available in this context

代码位于 asp.net 页面后面的代码中,该页面试图检索产品值

<script>
    var product = '<%= ReviewPageDefault.GetProductId()%>';
</script>

我已经在互联网上搜索过,但一无所获,感谢任何帮助或建议

【问题讨论】:

  • 这段代码在哪里?在哪个级别?它是否有权访问 HTTP 请求?
  • 是的,它位于自己的“实用程序”类中并继承了 HTTPRequest
  • and inherits the HTTPRequest - 我很感兴趣你是如何从一个密封类继承的:msdn.microsoft.com/en-us/library/… 或者这是你的一些 HTTPRequest 类?另外,您在哪里调用此方法 - 在 Web 表单、Application_Start、...中?
  • 我打错了,我先导入 System.Web.HttpRequest 在顶部,抱歉造成混淆
  • 是的,但是为了使用QueryString 属性,您需要首先获取此 Request 类的实例。你怎么样?这个Request 变量指向什么?

标签: asp.net vb.net httprequest


【解决方案1】:

让你的 Utilities 类将 Request 作为参数而不是从 Page 继承:

Public Class Utilities

    Public Function CheckString(checkedValue As String, request as HttpRequest)

        Dim check = ""
        If request.QueryString(checkedValue) Is Nothing Then
        Else
            check = request.QueryString(checkedValue)
        End If
        Return check

    End Function

End Class

当调用它时,从主页传递请求:

util.CheckString("stock", Request)

或在HttpRequest 类上将其设为extension method,以便您可以像这样使用它:

Request.CheckString("stock")

【讨论】:

  • 它不允许我从主页传递请求,因为它是一个共享功能,请求是一个非共享成员,有什么办法绕过它?
  • OK,所以你需要将Request作为参数传递给这个共享函数。该请求仅在从 Page 继承的 web 表单中可用。所以在你的标记中:var product = '&lt;%= ReviewPageDefault.GetProductId(Request)%&gt;';。现在GetProductId 函数将可以访问它。或者,将其作为 HttpRequest 类的扩展方法 - 这样会更容易,您无需将 Request 作为参数显式传递给那些静态函数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多