none
tratamento de querystring

    Question

  •  

    Preciso passar por uma url uma querystring para uma página aspx. Para isso, coloquei no evento onLoad da página o seguinte:

     

    if (!String.IsNullOrEmpty(Request.QueryString["chamado"].ToString()))

    {

    // recebe work item da querystring

    int codWi = Convert.ToInt32(Request.QueryString["chamado"].ToString());

    // monta grid com o chamado

    this.PesquisaWorkItemPorCodigo(codWi);

    }

     

    O problema ocorre quando tal querystring não é passada pela url, o que gera Object reference not set to an instance of an object.

     

    Como posso tratar os casos em que a querystring é passada e os casos em que não é passada ?

     

     

    Friday, November 07, 2008 1:16 PM

Answers

  • Veja se algo assim te ajuda
    []s

     

    Code Snippet

    if (Request.QueryString["chamado"] != null)

    {

    if (!String.IsNullOrEmpty(Request.QueryString["chamado"].ToString()))

    {

    // recebe work item da querystring

    int codWi = Convert.ToInt32(Request.QueryString["chamado"].ToString());

    // monta grid com o chamado

    this.PesquisaWorkItemPorCodigo(codWi);

    }

    }

     

     

    Friday, November 07, 2008 2:35 PM
  • Olá,

     

    Apenas complementando o post do Marcelo, o método IsNullOrEmpty da classe String já faz a verificação para ver se a variável está vazia ou nula, por isso, o primeiro IF pode ser evitado...

     

    Além disso, a QueryString já é uma coleção do tipo string, então também não há a necessidade da chamada ao método ToString:

     

    Code Snippet

     

     if (!String.IsNullOrEmpty(Request.QueryString["chamado"]))

     {

    // recebe work item da querystring

    int codWi = Convert.ToInt32(Request.QueryString["chamado"]);

     

    // monta grid com o chamado

    this.PesquisaWorkItemPorCodigo(codWi);

     }

     

     

    Abraços,
    Caio Proiete




    Caio Proiete
    http://www.caioproiete.com
    Friday, November 07, 2008 5:37 PM
  • Olá, Caio!

    Durante o desenvolvimento de algumas aplicações também me deparei com essas questões... a necessidade de usar um "if x != null" no request da QueryString, e inclusive uma conversão explícita para string. Não sei dizer ao certo os casos em que foi necessária essa medida, mas é uma das interregações que tenho com o framework 2.0

    Abraços.
    Friday, November 07, 2008 10:03 PM
  • Olá João,

     

    Eu não disse que você não precisa verificar se a string é nula... O que eu disse, é que o método IsNullOrEmpty ali em cima, já está fazendo isso, então ficou redundante.

     

    Sobre a conversão explícita para string, não faz mesmo sentido, justamente por que cada elemento da QueryString já é do tipo string...

     

    Será que você não está confundindo com a propriedade Session? Uma vez que você pode guardar qualquer coisa na coleção Session (lista de objects), seria uma situação comum guardar uma string, e depois recuperar com o ToString, se não quiser fazer o cast.

     

    De qualquer forma, seria interessante se você conseguisse encontrar o código que mencionou, para que pudéssemos apontar o que estava faltando.

     

    Um erro comum que vejo por aí (não sei se foi o seu caso), é a chamada do método ToString antes de verificar se o valor é null... Isso é um dos bugs que mais encontro quando examino o código de aplicações...

     

    Abraços,
    Caio Proiete




    Caio Proiete
    http://www.caioproiete.com
    Friday, November 07, 2008 10:20 PM

All replies

  • Veja se algo assim te ajuda
    []s

     

    Code Snippet

    if (Request.QueryString["chamado"] != null)

    {

    if (!String.IsNullOrEmpty(Request.QueryString["chamado"].ToString()))

    {

    // recebe work item da querystring

    int codWi = Convert.ToInt32(Request.QueryString["chamado"].ToString());

    // monta grid com o chamado

    this.PesquisaWorkItemPorCodigo(codWi);

    }

    }

     

     

    Friday, November 07, 2008 2:35 PM
  • Olá,

     

    Apenas complementando o post do Marcelo, o método IsNullOrEmpty da classe String já faz a verificação para ver se a variável está vazia ou nula, por isso, o primeiro IF pode ser evitado...

     

    Além disso, a QueryString já é uma coleção do tipo string, então também não há a necessidade da chamada ao método ToString:

     

    Code Snippet

     

     if (!String.IsNullOrEmpty(Request.QueryString["chamado"]))

     {

    // recebe work item da querystring

    int codWi = Convert.ToInt32(Request.QueryString["chamado"]);

     

    // monta grid com o chamado

    this.PesquisaWorkItemPorCodigo(codWi);

     }

     

     

    Abraços,
    Caio Proiete




    Caio Proiete
    http://www.caioproiete.com
    Friday, November 07, 2008 5:37 PM
  • Olá, Caio!

    Durante o desenvolvimento de algumas aplicações também me deparei com essas questões... a necessidade de usar um "if x != null" no request da QueryString, e inclusive uma conversão explícita para string. Não sei dizer ao certo os casos em que foi necessária essa medida, mas é uma das interregações que tenho com o framework 2.0

    Abraços.
    Friday, November 07, 2008 10:03 PM
  • Olá João,

     

    Eu não disse que você não precisa verificar se a string é nula... O que eu disse, é que o método IsNullOrEmpty ali em cima, já está fazendo isso, então ficou redundante.

     

    Sobre a conversão explícita para string, não faz mesmo sentido, justamente por que cada elemento da QueryString já é do tipo string...

     

    Será que você não está confundindo com a propriedade Session? Uma vez que você pode guardar qualquer coisa na coleção Session (lista de objects), seria uma situação comum guardar uma string, e depois recuperar com o ToString, se não quiser fazer o cast.

     

    De qualquer forma, seria interessante se você conseguisse encontrar o código que mencionou, para que pudéssemos apontar o que estava faltando.

     

    Um erro comum que vejo por aí (não sei se foi o seu caso), é a chamada do método ToString antes de verificar se o valor é null... Isso é um dos bugs que mais encontro quando examino o código de aplicações...

     

    Abraços,
    Caio Proiete




    Caio Proiete
    http://www.caioproiete.com
    Friday, November 07, 2008 10:20 PM