Вопрос

Я написал следующий код:

 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
Это было полезно?

Решение

Потому что любое значение, возвращаемое Request.QueryString("ID") вызов функции не преобразуется в Int16 Тип.В соответствии с документацией для Convert.ToInt16 способ, а FormatException выбрасывается всякий раз, когда:

значение не состоит из необязательного знака, за которым следует последовательность цифр (от 0 до 9).

Вы можете видеть, что такое ценность на самом деле возвращается путем разделения вашего кода на пару разных строк и установки точки останова.Например:

Dim E_ID As Integer
Dim queryString As String
queryString = Request.QueryString("ID")    ' <-- place breakpoint here
E_ID = Convert.ToInt16(queryString)

Другие советы

Здесь есть 2 вещи, на которые вы должны обратить внимание:

1) Вы пытаетесь присвоить Int16 целому числу (по умолчанию 32 бита).Это допустимая операция, однако есть вероятность, что вы могли бы внести ошибку в свое приложение.

2) Как упоминал Коди, значение, возвращаемое запросом.QueryString("ID") может не быть конвертируемым в Int16 и, следовательно, ошибка.Вы можете попробовать следующий код для проверки значения, возвращаемого запросом.Оператор 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.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top