0

我写了以下代码:

 Dim E_ID As Integer
 E_ID = Convert.ToInt16(Request.QueryString("ID"))

但是当它执行时,我总是得到一个FormatException

错误:输入字符串的格式不正确。

这可能是什么原因造成的?

我正在发送这样的价值。

Protected Sub lnkPrint_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles lnkPrint.Click
        lnkPrint.Attributes.Add("onclick", "return openBadgeReportPage('" + ddEvent.DataValueField + "','" + ddType.DataValueField + "')")
    End Sub
End Class
4

2 回答 2

4

因为函数调用返回的任何值都Request.QueryString("ID")不能转换为Int16类型。根据该Convert.ToInt16方法的文档,只要满足以下条件,FormatException就会抛出 a:

value 不包含可选符号后跟数字序列(0 到 9)。

您可以通过将代码分成几行不同的行并设置断点来查看实际返回的值。例如:

Dim E_ID As Integer
Dim queryString As String
queryString = Request.QueryString("ID")    ' <-- place breakpoint here
E_ID = Convert.ToInt16(queryString)
于 2011-01-31T11:24:41.273 回答
1

这里有两点需要注意:

1)您正在尝试将 Int16 分配给 Integer(默认为 32 位)。这是一个有效的操作,但是您可能会在您的应用程序中引入错误。

2)正如 Cody 提到的那样, Request.QueryString("ID") 返回的值可能无法转换为 Int16,因此会出现错误。您可以尝试以下代码以更安全的方式验证 Request.QueryString("ID") 语句返回的值:

Dim E_ID As Int16
Boolean isInteger = Int16.TryParse(Request.QueryString("ID"), out E_ID)

If isInteger Then
     // you have a valid short int inside the E_ID variable now.
于 2011-01-31T11:36:35.733 回答