Octubre 27

2016

Hoy me he encontrado con un problemilla, que al final, como siempre, se me ilumina la bombilla y la solucion fue mas facil de lo que esperaba.

Como pasar un dato (variable) a un Servicio Web dentro de nuestra pagina con JAVA SCRIPT.

En un principio el tema es el siguiente. Tenemos un WebMethod, en nuestra pagina ASPX, que lo invocamos desde un AJAX, en mi caso para realizar un Autocompletar en una pagina web, en el que, ademas de los valores que le enviamos desde el cuadro de texto necesitamos enviar un valor que hemos recogido en otro lugar de la pagina web, como por ejemplo, seleccionar de una lista un valor.

Esto lo podemos solucionar facilmente con el uso de COOKIES y variables de sesion.

Si accedeis a mi post sobre como realizar un autocompletar, vereis que solo se envia el texto que estamos escribiendo, y en el WebMethod (o webservice integrado en la propia pagina) se realiza la consulta a la base de datos.

Esta consulta pude depender de varios datos externos, uno, en mi caso, lo recojo con una variable de sesion, ejemplo, el Id de Usuario que se ha identificado en la web. Pero ademas necesito enviar eun Id de Elemento seleccionado en una lista. Es aqui donde se me plantea el problema en cuenstion ya que no puedo hacer un postback porque perderia los valores que se han suministrado desde JAVASCRIPT. Para ello lo que vamo a utilizar es, desde JAVASCRIPT al seleccionar de la tabla el elemento con el ID que necesito, lo almacenamos en una COOKIE, que en mi caso la caducidad es la misma que la sesion del susuario, ya que no me interesa para nada mas esa COOKIE, y desde el WebMethod recuperamos ese valor y lo adjuntamos a la consulta.

Esto ha sido todo amigos

No hay mas que decir, ahora os pongo un resumen del codigo que necesitarias, pero ten en cuenta que lo debes de adaptar a tu web.

    <!-- en la pagina Default.aspx -->
<script type="text/javascript">
function openElemento(number) {
document.cookie = "IdElemento=" + encodeURIComponent(number); //assing a cookie
}
</script>

/* En el archivo Default.aspx.cs*/
[System.Web.Services.WebMethod]
[System.Web.Script.Services.ScriptMethod(ResponseFormat = System.Web.Script.Services.ResponseFormat.Json)]
public static List<string> GetName(string pre)
{
if (HttpContext.Current.Session["IdUsuario"] != null)
{
string IdElemento = string.Empty;

try
{
HttpCookie myCookie = new HttpCookie("IdElemento");
myCookie = HttpContext.Current.Request.Cookies["IdElemento"];
IdElemento = myCookie.Value;
}
catch
{
IdElemento = string.Empty;
}

if (!string.IsNullOrEmpty(IdElemento)) IdElemento = " AND IdElemento = " + IdElemento;

string querySQL = "SELECT distinct Producto as Nombre " +
" FROM product " +
" where Producto like '%" + pre + "%' AND IdUsuario = " +
HttpContext.Current.Session["IdUsuario"].ToString() + " " + IdElemento;

return ManejoDatos.GetName(querySQL);
}
else
return null;
}

No olvidarse que es necesario haber leido el post de Autocompletar.

#ASP #CSHARP #AJAX


0 Comentarios

Escribir un comentario

5 - 0 =



Archivo