Principales respuestas
Error en llamada Ajax, VB.net

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
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- Propuesto como respuesta Laura CeglzModerator miércoles, 27 de julio de 2016 18:08
- Marcado como respuesta José De AlvaModerator jueves, 28 de julio de 2016 15:49