La pregunta es: Alguna vez has recuperado desde javascript un objeto personalizado creado en el servidor? o mejor aún, has recuperado desde javascript una colección de esos objetos personalizados?
Antes de ver cómo es que sugiero que se haga, ponte un momento a pensar cómo lo harías, luego de eso comparemos las soluciones, si consideras que la tuya es mejor, te invito a que la compartas.
Empezaré con el ejemplo.
1. Añado un proyecto VB.NET de tipo ASP.NET versión 3.5 y lo llamaré CustomObjectsToJavascript. Chequee que esté incluída la referencia a ASP.NET AJAX (System.Web.Extensions).
2. Añado una clase personalizada llamada ServerObject y tipeo el siguiente código:
Public Class ServerObject Public Property FullName() As String Public Property Position() As String Public Property Age() As Integer Public Sub New(ByVal fullname As String, ByVal position As String, ByVal age As Integer) _FullName = fullname _Position = position _age = age End Sub End Class
3. Añado un web service llamado WebService1.asmx, y añado el sgte código:
Imports System.Web.Services Imports System.Collections.Generic <System.Web.Script.Services.ScriptService()> _ <System.Web.Services.WebService(Namespace:="http://tempuri.org/")> _ Public Class WebService1 Inherits System.Web.Services.WebService <WebMethod()> _ Public Function MyServerObjects() As List(Of ServerObject) Dim so As New List(Of ServerObject) so.Add(New ServerObject("Juan Cotrina", "Consultor Financiero", 31)) so.Add(New ServerObject("Johnny Serrano", "Soporte de Sistemas", 32)) so.Add(New ServerObject("Herky Mezarina", "Arquitecto de Software", 33)) so.Add(New ServerObject("Ysrael Mertz", "Webmaster", 34)) so.Add(New ServerObject("Steve Chunga", "Desarrollador de software", 35)) Return so End Function End Class
Como observan, el web service devolverá una colección de objetos personalizados. Y es esta colección de objetos personalizados la que recuperará javascript.
4. Añado una página aspx e inserto el sgte código:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>Recuperar objetos personalizados desde javascript</title> <script type="text/javascript"> function getServerObjects() { CustomObjectsToJavascript.WebService1.MyServerObjects(WhenServerObjectsSuccess, WhenServerObjectsFailure); } function WhenServerObjectsSuccess(result, context, methodName) { var Objects = new Sys.StringBuilder(); for (var i = 0; i < result.length; i++) { var ServerObject = result[i]; Objects.append("Mi nombre es " + ServerObject.FullName + " y mi especialidad es " + ServerObject.Position + "<br />"); } $get("div1").innerHTML = Objects.toString(); } function WhenServerObjectsFailure(error, context, methodName) { $get("div1").innerHTML = error.get_message(); } </script> </head> <body> <form id="form1" runat="server"> <asp:ScriptManager ID="ScriptManager1" runat="server"> <Services> <asp:ServiceReference Path="~/WebService1.asmx" InlineScript="true" /> </Services> </asp:ScriptManager> <div> <a href="javascript:;" onclick="getServerObjects()">Recuperar Objetos Personalizados desde el servidor</a> <div id="div1" /> </div> </form> </body> </html>
Como ven, era muy simple. La carnecita está en estas líneas:
<asp:ServiceReference Path="~/WebService1.asmx" InlineScript="true" />
la cual hace la referencia al web service.
CustomObjectsToJavascript.WebService1.MyServerObjects(WhenServerObjectsSuccess, WhenServerObjectsFailure);
la cual apunta a Namespace.web_service.método_del_web_service(…)
Ya para ir terminando le diré que por más que se trate de un objeto personalizado, para javascript esto no representa un problema, porque los servicios web ASP.NET para hacer la comunicación cliente servidor envían la colección de objetos con el formato JSON, el cual tiene natural entendimiento con javascript, y javascript puede manipular esa colección como si de un simple array se tratara.
Espero que les sea de utilidad ;)
No hay comentarios.:
Publicar un comentario