none
Texbox Autocomplete JQuery con dos parametros RRS feed

  • Pregunta

  • Buena tarde a todos me pudieran ayudar de favor, estoy intentando implementar en mi aplicación un textbox con autocomplete hasta ahorita todo bien conforme a este articulo:

    Implement jQuery AutoComplete TextBox from database using AJAX PageMethods in ASP.Net

    La idea es que yo tengo variables de session después de un login estas variables de sesión recuperan un id de un país como en la tabla Customers de la base de datos Northwind

    

    Yo solo quiero que en el textbox solo salgan los clientes de la variable de session que la incluyo cuando el cliente inicia session después de un login esa variable indica de que país es. Por ejemplo si el cliente es de México solo deberían de aparecer en el texbox los clientes de México:

    Ana Trujillo

    Antonio Moreno

    Francisco Chang

    etc..

    ¿Como puedo pasarle un parámetro más a este código y que este parámetro sea la variable de session que recupero al iniciar despues del login dentro de la pagina default en el page_load.?

    string useridpais = (string)Session["IdUsupais"];

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="CS.aspx.cs" Inherits="_Default" %>
    
    <!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></title>
        <style type="text/css">
            body
            {
                font-family: Arial;
                font-size: 10pt;
            }
        </style>
    </head>
    <body>
        <form id="form1" runat="server">
        <script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.10.0.min.js" type="text/javascript"></script>
        <script src="http://ajax.aspnetcdn.com/ajax/jquery.ui/1.9.2/jquery-ui.min.js" type="text/javascript"></script>
        <link href="http://ajax.aspnetcdn.com/ajax/jquery.ui/1.9.2/themes/blitzer/jquery-ui.css"
            rel="Stylesheet" type="text/css" />
        <script type="text/javascript">
            $(function () {
                $("[id$=txtSearch]").autocomplete({
                    source: function (request, response) {
                        $.ajax({
                            url: '<%=ResolveUrl("~/CS.aspx/GetCustomers") %>',
                            data: "{ 'prefix': '" + request.term + "'}",
                            dataType: "json",
                            type: "POST",
                            contentType: "application/json; charset=utf-8",
                            success: function (data) {
                                response($.map(data.d, function (item) {
                                    return {
                                        label: item.split('-')[0],
                                        val: item.split('-')[1]
                                    }
                                }))
                            },
                            error: function (response) {
                                alert(response.responseText);
                            },
                            failure: function (response) {
                                alert(response.responseText);
                            }
                        });
                    },
                    select: function (e, i) {
                        $("[id$=hfCustomerId]").val(i.item.val);
                    },
                    minLength: 1
                });
            });   
        </script>
        Enter search term:
        <asp:TextBox ID="txtSearch" runat="server" />
        <asp:HiddenField ID="hfCustomerId" runat="server" />
        <asp:Button ID="Button1" Text="Submit" runat="server" OnClick="Submit" />
        </form>
    </body>
    </html>
    

    código cs

    using System;
    using System.Collections.Generic;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    
    using System.Web.Services;
    using System.Configuration;
    using System.Data.SqlClient;
    
    public partial class _Default : System.Web.UI.Page
    {
        [WebMethod]
        public static string[] GetCustomers(string prefix)
        {
            List<string> customers = new List<string>();
            using (SqlConnection conn = new SqlConnection())
            {
                conn.ConnectionString = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
                using (SqlCommand cmd = new SqlCommand())
                {
                    cmd.CommandText = "select ContactName, CustomerId from Customers where ContactName like @SearchText + '%'";
                    cmd.Parameters.AddWithValue("@SearchText", prefix);
                    cmd.Connection = conn;
                    conn.Open();
                    using (SqlDataReader sdr = cmd.ExecuteReader())
                    {
                        while (sdr.Read())
                        {
                            customers.Add(string.Format("{0}-{1}", sdr["ContactName"], sdr["CustomerId"]));
                        }
                    }
                    conn.Close();
                }
            }
            return customers.ToArray();
        }
    
    
        protected void Submit(object sender, EventArgs e)
        {
            string customerName = Request.Form[txtSearch.UniqueID];
            string customerId = Request.Form[hfCustomerId.UniqueID];
            ClientScript.RegisterStartupScript(this.GetType(), "alert", "alert('Name: " + customerName + "\\nID: " + customerId + "');", true);
        }
    }
    

    Gracias por responder.

    saludos.



    Hugo Damian

    viernes, 3 de mayo de 2019 21:58

Respuestas

  • hola

    Si estas realizando una llamada ajax podrias enviar mas parametros

    El valor de la Session podrias asignarlo en un <asp:Hidden Id="useridpais " ..>

     asi despues usas

    var useridpais = $("#<%=useridpais.ClientID%>").val();

    entonces este valor podrias pasarlo al ajax

    var data = {
            "prefix": request.term,
            "paisId": useridpais  
            };

    $.ajax({ url: '<%=ResolveUrl("~/CS.aspx/GetCustomers") %>', data: JSON.stringify(data), dataType: "json", type: "POST",

    en el webmethod agregas el parametros

    [WebMethod]
        public static string[] GetCustomers(string prefix, int paisId)
        {

    usas ese valor en el filtro de los datos

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Propuesto como respuesta Carlos_Ruiz_M martes, 7 de mayo de 2019 15:57
    • Marcado como respuesta Hugo Damian jueves, 9 de mayo de 2019 21:44
    martes, 7 de mayo de 2019 5:12

Todas las respuestas


  • Gracias por levantar tu consulta en los foros de MSDN. Con respecto a la misma, te comento que estaremos realizando una revisión a profundidad acerca del inconveniente que se te está presentando.

    Proporcionaremos una respuesta lo más pronto posible.

    Gracias por usar los foros de MSDN.

    Carlos Ruiz
     ____

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde. 

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.  

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft.
    lunes, 6 de mayo de 2019 22:58
  • hola

    Si estas realizando una llamada ajax podrias enviar mas parametros

    El valor de la Session podrias asignarlo en un <asp:Hidden Id="useridpais " ..>

     asi despues usas

    var useridpais = $("#<%=useridpais.ClientID%>").val();

    entonces este valor podrias pasarlo al ajax

    var data = {
            "prefix": request.term,
            "paisId": useridpais  
            };

    $.ajax({ url: '<%=ResolveUrl("~/CS.aspx/GetCustomers") %>', data: JSON.stringify(data), dataType: "json", type: "POST",

    en el webmethod agregas el parametros

    [WebMethod]
        public static string[] GetCustomers(string prefix, int paisId)
        {

    usas ese valor en el filtro de los datos

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Propuesto como respuesta Carlos_Ruiz_M martes, 7 de mayo de 2019 15:57
    • Marcado como respuesta Hugo Damian jueves, 9 de mayo de 2019 21:44
    martes, 7 de mayo de 2019 5:12
  • Gracias por la ayuda me sirvió mucho.

    Hugo Damian

    jueves, 9 de mayo de 2019 21:44
  • Hola, me podrian ayudar porfas?

    Hice lo mimo que dice el manual de la pagina que apunta en la pregunta pero no me llama al GetCustomers lo he hecho tambien con AjaxControltoolkity tampoco me funciona.

    Muchas gracias


    diego

    jueves, 18 de noviembre de 2021 19:39