我写了以下代码:
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
答案 0 :(得分:4)
因为Request.QueryString("ID")
函数调用返回的值不能转换为Int16
类型。根据{{3}}的文档,只要:
Convert.ToInt16
method
值不包含可选符号后跟一系列数字(0到9)。
您可以通过将代码分成几行并设置断点来查看返回实际的值。例如:
Dim E_ID As Integer
Dim queryString As String
queryString = Request.QueryString("ID") ' <-- place breakpoint here
E_ID = Convert.ToInt16(queryString)
答案 1 :(得分:1)
这里有两件事需要注意:
1)您正在尝试将Int16分配给整数(默认为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.