none
como validar una captura de datos con webbrowser en C# RRS feed

  • Pregunta

  • Buenos dias como estan espero que bien necesito validar que si un div de una sitio web, tenga texto o no, ya que traspasa el dato pero cuando no hay se cae y sale este error

    el codigo es el siguiente:

    if (nav.Document.GetElementById("cargaImagenProducto").InnerText == null)   
                {
                   lbl_img.Text = wbbr_img.Document.GetElementById("cargaImagenProducto").InnerText;

    System.NullReferenceException
      HResult=0x80004003
      Mensaje = Referencia a objeto no establecida como instancia de un objeto.
      Origen = Sistema de Inventario
      Seguimiento de la pila:
       en Sistema_de_Inventario.producto_imagenes.btn_sumarfoto_Click(Object sender, EventArgs e) en E:\Econommerce\Ecommerce\Sistema de Inventario\producto_imagenes.cs: línea 206

    Gracias


    Una respuesta JP

    martes, 20 de abril de 2021 17:06

Respuestas

  • Si estás usando una versión moderna del compilador de C# que entienda el operador ?., entonces quita el "if" y simplemente ponle ? a todos los puntos:

    lbl_img.Text = wbbr_img?.Document?.GetElementById("cargaImagenProducto")?.InnerText;

    Este operador devuelve null si el objeto sobre el que se aplica es null. Al final de la cadena, si resulta que el dato no te ha llegado, le asignará un null al .Text del label, con lo que el label se mostrará vacío.

    Si tienes una versión más antigua, entonces hay que poner todas las condiciones en el "if":

    if (nav != null && nav.Document != null && nav.Document.GetElementById("cargaImagenProducto") != null && nav.Document.GetElementById("cargaImagenProducto").InnerText != null)   
    {
        lbl_img.Text = wbbr_img.Document.GetElementById("cargaImagenProducto").InnerText;

    Desde luego, se puede reescribir de muchas maneras y se puede evitar la doble llamada de función interponiendo una variable. Pero lo importante es que hay que ir chequeando uno por uno cada uno de los elementos comprobando que no sea null antes de pasar al siguiente. Desde luego, si hay uno de ellos que tienes la seguridad de que nunca puede ser null, puedes omitirlo en las comprobaciones.

    Y por cierto, tenías un error donde comprobabas si era igual a null. Lo que hay que comprobar es que sea distinto de null.

    miércoles, 21 de abril de 2021 6:25
    Moderador

Todas las respuestas

  • Si estás usando una versión moderna del compilador de C# que entienda el operador ?., entonces quita el "if" y simplemente ponle ? a todos los puntos:

    lbl_img.Text = wbbr_img?.Document?.GetElementById("cargaImagenProducto")?.InnerText;

    Este operador devuelve null si el objeto sobre el que se aplica es null. Al final de la cadena, si resulta que el dato no te ha llegado, le asignará un null al .Text del label, con lo que el label se mostrará vacío.

    Si tienes una versión más antigua, entonces hay que poner todas las condiciones en el "if":

    if (nav != null && nav.Document != null && nav.Document.GetElementById("cargaImagenProducto") != null && nav.Document.GetElementById("cargaImagenProducto").InnerText != null)   
    {
        lbl_img.Text = wbbr_img.Document.GetElementById("cargaImagenProducto").InnerText;

    Desde luego, se puede reescribir de muchas maneras y se puede evitar la doble llamada de función interponiendo una variable. Pero lo importante es que hay que ir chequeando uno por uno cada uno de los elementos comprobando que no sea null antes de pasar al siguiente. Desde luego, si hay uno de ellos que tienes la seguridad de que nunca puede ser null, puedes omitirlo en las comprobaciones.

    Y por cierto, tenías un error donde comprobabas si era igual a null. Lo que hay que comprobar es que sea distinto de null.

    miércoles, 21 de abril de 2021 6:25
    Moderador
  • Hola,

    ¿Alguna novedad sobre la consulta realizada?

    Gracias por usar los foros de MSDN.

    Eric Ruiz

    ____________________________

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.

    Si tiene algún cumplido o reclamo sobre el soporte de MSDN siéntase en la libertad de contactar MSDNFSF@microsoft.com.

    miércoles, 21 de abril de 2021 15:27
    Moderador