2012-04-16 1 views
0

пытается получить параметр «идентификатор» из строки запроса запрашиваемой страницы, как этотчека и получить параметр от URL текущей страницы asp.net

If Request.QueryString IsNot Nothing AndAlso _ 
      Request.QueryString.GetKey("id") IsNot Nothing Then 
      DeleteVehicle(Request.QueryString.GetKey("id")) 
End If 

, но я получаю эту ошибку

System.NullReferenceException: Object reference not set to an instance of an object. 

Source Error: 

Line 16:   If Request.QueryString IsNot Nothing AndAlso _ 
Line 17:    Request.QueryString.GetKey("id") IsNot Nothing Then 

Source File: G:\projects_backup\Toaab\Toaa\admin\vehicle\view.aspx.vb Line: 16 

пожалуйста, вы можете помочь мне

EDIT

зовут это в случае page_load

той же страница (которая автоматически сгенерирована ссылка) вызываются через гиперссылка

я также изменить код

If Request.QueryString("id") IsNot Nothing OrElse Request.QueryString("id") IsNot String.Empty Then 
DeleteVehicle(Request.QueryString("id").ToString) 
End If 
+0

Что происходит, когда вы используете 'Request.QueryString ("ID")'? – Tejs

+0

Где (в каком методе, этапе жизненного цикла страницы и т. Д.) Вы выполняете этот код? – Andrei

+1

Я не очень хорошо знаю VB.NET, но 'AndAlso' выглядит так, как будто он будет оценивать оператор слева. И оператор справа, даже если инструкция слева ложна. Таким образом, использование GetKey в объекте Nothing (Request.QueryString) приведет к ошибке. –

ответ

4

Чтобы увидеть, если значение существует в QueryString, проверьте, является ли значение приравнивается к пустой строке, а не нуль:

Попробуйте вместо этого:

If String.IsNullOrEmpty(Request.QueryString("id")) = False Then 
    DeleteVehicle(Request.QueryString("id")) 
End If 
1
  1. Нет перегрузки в C#/VB.Net, которая предоставляет параметр String в функции GetKey.
  2. Если вы проверили все события Page Life Cycle, значение Request.QueryString никогда не будет равно null (Кроме того, оно содержит некоторое неточное значение).
  3. Попробуйте изменить свой код, как показано ниже.

If Request.QueryString("id") IsNot Nothing 
       AndAlso String.IsNullOrEmpty(Request.QueryString("id")) = False Then 
    DeleteVehicle(Request.QueryString("id").ToString) 
End If 
+0

Вы действительно должны использовать 'AndAlso' вместо' And'. 'AndAlso' выпрыгнет, если первое условие ложно. 'И' будет выполнять оба условия каждый раз. Я нашел «И» полезен только тогда, когда вы сравниваете возвращаемые значения с функциями. –