none
Error en llamada Ajax, VB.net RRS feed

  • Pregunta

  • Estoy tratando de realizar un desarrollo web en el cual tengo una pagina, donde tengo un botón que al pulsarlo realiza una llamada Ajax a un metodo, y mientras el resto de la página se ejecuta de forma paralela.

    Para ello tengo en la página el siguiente código que realiza la llamada Ajax:

    $(function () {
                $('#btprueba').click(function () {
                    var idproduct = document.getElementById("<%=hfProductID.ClientID %>").value;
                    $.ajax({                    
                        type: "POST",
                        url: "Default.aspx/QueryFlights1",
                        data: '{productID: ' + idproduct + '}',
                        contentType: "application/json; charset=utf-8",
                        dataType: "json"                    
                    });
                    //$('#sitio').load('MiPagina.aspx');
                });
            });

    Luego en el cuerpo de la página tengo esta tabla donde pondré los resultados obtenidos:

    <table id="tbFlights" runat="server"> 
                                                <tr>
                                                    <td>
                                                        <input type="button" id="btprueba" value="pulsa"/>  
                                                    </td>
                                                </tr>                                                                                                                                                                            
                                                <tr>
                                                    <td>
                                                        <asp:Label ID="lbMaxSearch" runat="server" Font-Bold="True" ForeColor="#FF3300" Text=""></asp:Label>
                                                    </td>
                                                </tr>
                                                <tr>
                                                    <td>
                                                        <asp:Label ID="lbSolutionida" runat="server" CssClass="labelPrompt" Width="100%" Visible="true"></asp:Label>
                                                    </td>
                                                </tr>
                                                <tr>
                                                    <td>
                                                        <asp:Label ID="lbSolutionvuelta" runat="server" CssClass="labelPrompt" Width="100%" Visible="true"></asp:Label>
                                                    </td>
                                                </tr>
                                            </table> 


    Y por la parte de servidor, en el code behind tengo el siguiente código que es el método llamado por Ajax:

    <WebMethod>
        Public Shared Sub QueryFlights1(ByVal productID As String)
            Dim flight As New _Default
            flight.QueryFlights(productID)
        End Sub


    Y el método anterior, QueryFlights1, llama a el siguiente método:

    Protected Sub QueryFlights(ByVal productID As String)
            Using Mostrar = New ModeloCanada(New AuxiliarDAO().getEFSQLConnection)
                Dim u = New Contact
                GetSessions(u)
                Dim c = New ClientDAO().GetClient(u.IdClient)
    
                Dim idProduct As Integer = productID
                'Dim idProduct As Integer = CircuitList.SelectedCircuit()
    
                Dim startCity = (From start In Mostrar.Itinerary
                                 Where start.ID_Product = idProduct
                                 Select start.ID_Start_City).FirstOrDefault()
                Dim endCity = (From start In Mostrar.Itinerary
                               Where start.ID_Product = idProduct
                               Select start
                               Order By start.Day_From Descending).FirstOrDefault()
    
                Dim n_nights = (From start In Mostrar.Itinerary
                                Where start.ID_Product = idProduct
                                Select start).Count()
    
                Dim startCityName = (From city In Mostrar.Cities
                                     Where city.ID_City = startCity
                                     Select city).FirstOrDefault()
                Dim endCityName = (From city In Mostrar.Cities
                                   Where city.ID_City = endCity.ID_End_City
                                   Select city).FirstOrDefault()
                Dim countryClient = (From country In Mostrar.Countries
                                     Where country.ID_Country = c.IDCountry
                                     Select country).FirstOrDefault()
    
                Dim dateGo As Date = "2016-08-05"
                'Dim dateGo As Date = lblDate.Text
                Dim dateStart As String = dateGo.ToString("yyyy-MM-dd")
                Dim dateReturn As Date = dateGo.AddDays(n_nights)
                Dim dateEnd As String = dateReturn.ToString("yyyy-MM-dd")
    
                Dim result As Array
                Dim consulta As New GoogleAPI
                result = consulta.conectionApiCanada(c.City, startCityName.City_Desc, endCityName.City_Desc, dateStart, dateEnd, countryClient.ISO2, True)
    
                If result(0) = 0 And result(1) = 0 Then
                    lbMaxSearch.Visible = True
                    lbMaxSearch.Text = "En el día de hoy no podemos realizar más busquedas."
                Else
                    Dim id As Int16 = result(0)
                    Dim id2 As Int16 = result(1)
                    If id = -1 And id2 = -1 Then
                        lbSolutionida.Visible = True
                        lbSolutionvuelta.Visible = True
                        lbSolutionida.Text = "La ciudad inicio del tour es la misma donde reside."
                        lbSolutionvuelta.Text = "La ciudad final del tour es la misma donde reside."
                    ElseIf id = -1 And id2 <> -1 Then
                        lbSolutionida.Visible = True
                        lbSolutionvuelta.Visible = True
                        lbSolutionida.Text = "La ciudad inicio del tour es la misma donde reside."
                        Dim flightsvuelta = (From q In Mostrar.Flights
                                             Where q.ID_RequestAPI = id2
                                             Select q
                                             Order By q.Sale_Price Ascending).FirstOrDefault()
                        Dim precioVuelta As String = flightsvuelta.Sale_Price
                        Dim currency As String = flightsvuelta.Currencies.Currency_Short
                        lbSolutionvuelta.Text = "Vuelos de " + endCityName.City_Desc + " a " + c.City + " el día " + dateEnd + " desde: " + precioVuelta + " " + currency + "."
                    ElseIf id <> -1 And id2 = -1 Then
                        lbSolutionida.Visible = True
                        lbSolutionvuelta.Visible = True
                        Dim flightsida = (From q In Mostrar.Flights
                                          Where q.ID_RequestAPI = id
                                          Select q
                                          Order By q.Sale_Price Ascending).FirstOrDefault()
                        Dim precioIda As String = flightsida.Sale_Price
                        Dim currency As String = flightsida.Currencies.Currency_Short
                        lbSolutionida.Text = "Vuelos de " + c.City + " a " + startCityName.City_Desc + " el día " + dateStart + " desde: " + precioIda + " " + currency + "."
                        lbSolutionvuelta.Text = "La ciudad final del tour es la misma donde reside."
                    ElseIf id <> -1 And id2 <> -1 Then
                        Dim flightsida = (From q In Mostrar.Flights
                                          Where q.ID_RequestAPI = id
                                          Select q
                                          Order By q.Sale_Price Ascending).FirstOrDefault()
                        Dim flightsvuelta = (From q In Mostrar.Flights
                                             Where q.ID_RequestAPI = id2
                                             Select q
                                             Order By q.Sale_Price Ascending).FirstOrDefault()
    
                        Dim precioIda As String = flightsida.Sale_Price
                        Dim precioVuelta As String = flightsvuelta.Sale_Price
                        Dim currency As String = flightsida.Currencies.Currency_Short
    
                        lbSolutionida.Visible = True
                        lbSolutionvuelta.Visible = True
    
                        lbSolutionida.Text = "Vuelos de " + c.City + " a " + startCityName.City_Desc + " el día " + dateStart + " desde: " + precioIda + " " + currency + "."
                        lbSolutionvuelta.Text = "Vuelos de " + endCityName.City_Desc + " a " + c.City + " el día " + dateEnd + " desde: " + precioVuelta + " " + currency + "."
                    End If
                End If
            End Using
        End Sub

    Y es en este último método donde cuando pulso el botón me da el error:

    "Se produjo una excepción de tipo 'System.NullReferenceException' en App_Web_cxpgt3ov.dll pero no se controló en el código del usuario"
    "Información adicional: Referencia a objeto no establecida como instancia de un objeto."

    El error me lo marca en la línea:  lbSolutionida.Visible = True o cualquier otra donde este lbSolutionida o lbSolutionvuelta

    Agradecería su ayuda, muchas gracias, saludos

    lunes, 25 de julio de 2016 13:57

Respuestas

  • hola

    Desde un servicio web no puedes acceder a los controles de la pagina, se supone que envias datos simple mediante json y los controles los ocultas usando codigo javascript (o jquery)

    Acceder al lbSolutionida desde el codigo del webmethod es incorrecto

    Debes enviar el texto y algun flag que indique si se muestra o no el control y recibir esto en el $.ajax, en su success es donde tomas los datos y los asignas al label usando javascript

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 25 de julio de 2016 15:45