Marc Rubiño

ASP.NET, C#, AJAX.NET, JavaScript, etc.

July 2009 - Artículos

ScriptReferenceProfiler Bug con el nuevo release de AjaxControlToolkit

Ya no hay duda de la gran utilidad que nos proporciona la nueva opción CompositeScript de nuestro ScriptManager para combinar scripts y la utilidad ScriptReferenceProfile para conocer los scripts que tenemos que referenciar. Si queréis más información sobre este tema podéis consultar la entrada de José Manuel Alarcón o la de Chalalo Land sobre el tema.

Pero esta utilidad que hace más óptimas nuestras aplicaciones webs, me ha provocado estar un par de días desesperado buscando un error que me estaba volviendo loco y no había manera de poder solucionar.

Os pondré en antecedentes sobre el entorno y el posterior error:

Me encontraba yo realizando una aplicación web con Visual Studio 2008 y el framework 3.5, esta solución también utilizaba los controles ASP.NET AJAX y JQuery.

Y no se me ocurre otra cosa que en medio del desarrollo actualizar las librerías de AJAXControlToolKit para utilizar los nuevos controles incluidos en la nueva versión AJAX Control Toolkit (May 2009 Release).

versiones

Iluso de mi, creía que como el proyecto hace referencia a los asemblies independientemente de la versión, solo tendría que actualizar y todo funcionaría a la primera XD.

asemblies

Pero como no podía ser de otra manera la primera en la frente y el proyecto lanza una excepción al iniciarse.

error

Error al cargar el ensamblado ‘AjaxControlToolkit, Version=1.0.11119.38627 .  

El típico error que la versión de ASP.NET AJAX no corresponde con el .Net Framework.

  • Para el 2.0 con vs2005 –> 20229
  • Para el 3.5 con vs2008 –> 30512

Como el error no era nuevo para mí, estuve repasando versiones una y otra vez, reinstalando librerías, pero no había manera de solucionar el problema. Hasta que me fije más detalladamente en el mensaje de error.

La definición del manifiesto del ensamblado no coincide con la referencia al ensamblado

Hemos quedado que la referencia al ensamblado del proyecto no tiene en cuenta la versión de la librería pero me da un error de versión?

Entonces fue cuando se me encendió la luz y recordé de que manera nos ayuda el control ScriptReferenceProfile para referenciar las librerías a combinar con nuestro ScriptManager.

scripts

scripts2

Estamos pasando la referencia de los script con la versión incluida !!!!!!!

Solo tenemos que eliminar la versión y el PublicKeyToken para que la aplicación vuelva a funcionar perfectamente.

script3

Solo tenemos que recordar eliminar esta información y nos evitaremos problemas al actualizar versiones ;-)

Espero que esta entrada os evite pasar unos días instalando y desinstalando librería sin control.

CrossPosting de http://lonetcamp.com

JSON con ASP.NET II

Por petición popular voy a ampliar el artículo que dedique en su día a la clase DataContractJsonSerializer la cual podemos utilizar para serializar o deserializar objetos JSon a objetos .NET.

En este artículo explicaré como pasar una colección de objetos JSON al servidor mediante ASP.Net AJAX de una forma muy sencilla.

Puedes ojear el artículo inicial en : serializar-deserializar-json-en-asp-net

Simplemente ampliaré el ejemplo que ya utilicé en el primer artículo, para que podamos seleccionar varios registros de la grid y posteriormente pasar esta lista de objetos al servidor utilizando un método accesible desde el cliente “PageMethod” con ASP.NET AJAX.

ser2

Este “PageMethod” es muy sencillo, simplemente espera una colección de objetos ProductoData.

Por defecto nuestro método utilizará el formato JSon para recibir los datos, pero he dejado el atributo ResponseFormat para que veáis como se puede especificar si queremos utilizar XML o JSON para nuestro tratamiento de los datos.

En esta imagen podéis comprobar como nuestra colección de objetos llega perfectamente deserializado y convertido a nuestra lista de objetos ProductoData.

ser

Como podéis comprobar en el servidor no nos tenemos que preocupar de convertir los datos que recibimos del cliente, porque es totalmente transparente para nosotros.

La parte donde lo tendremos un poquito más difícil es en el script del cliente, que tiene que formatear los datos en un correcto objeto JSON y enviar los datos al servidor.

function BorrarSeleccionados( ) {

    var ProductoDataList = new Array();
    $("#tableproductos tr td :checked").each(function() {

    ProductoDataList.push('{"ProductID":'
        + $(this).parent().next()[0].innerText + 
        ', "ProductName":"' 
        + $(this).parent().next().next()[0].innerText +
        '", "UnitPrice":' 
        + $(this).parent().next().next().next()[0].innerText +
        ', "UnitsInStock":' 
        + $(this).parent().next().next().next().next()[0].innerText + ' }');

    });

    var productos = JSON.parse(
      '[' + ProductoDataList.toLocaleString().replace(/;/g, ",")+ ']');
PageMethods.BorrarSeleccionados(productos, BorrarSeleccionadosOK, BorrarSeleccionadosKO); }

Esta función JavaScript utiliza JQuery para recorrer la grid en busca de los elementos seleccionados “checked”. Crea un Array de objetos al cual iremos añadiendo los elementos seleccionados dando el formato JSon que necesitamos para generar nuestro objeto ProductoData “ProductID, ProductName, UnitPrice, UnitsInStock”.

Luego utilizaremos la clase JSON para parsear el Array en un Objeto JSON correctamente formado y gracias a esta clase no tenemos que utilizar el famoso eval de JavaScript evitando los problemas de seguridad.

Finalmente pasamos el objeto JSON obtenido al método de servidor que recogerá los datos y ya tenemos el ejemplo 100% funcionando.

ser3

Realmente utilizar el formato de datos JSON con ASP.NET AJAX es realmente fácil, únicamente se nos puede complicar un poco la cosa con la parte de dar formato a los datos en el cliente.

Espero que os sea útil este pequeño ejemplo y a los que me habéis pedido esta explicación ya me comentareis si esto es lo que necesitabais.

Algunas Referencias relacionadas con el artículo:

http://www.json.org/js.html

http://jquery.com/

CrossPosting: http://mrubino.net