none
Postback em textbox com autocompletar RRS feed

  • Pergunta

  • Prezados tenho um textbox com autocompletar que fiz através de javascript.

    Porém preciso do autopostback true neste Textbox, porque quando ele for preenchido com um código ira jogar outra informação em outros dois textbox.

    Porém se eu deixar o tb com autopostback true, quando vou digitando e preenchedo o código, se clicar, irá dar o postback claro, e apagar tudo.

    Porém preciso das duas funcionalidades juntas.

    Como fazer?

    Pensei em desabilitar o defaultbutton, porém conseguir apenas trocar para outro botão que coloquei como btnpesquisar

    cxTeste.Attributes.Add("onkeydown", "if(event.which || event.keyCode){if ((event.which == 13) || (event.keyCode == 13)) {document.getElementById('" + btnPesquisar.UniqueID + "').click();return false;}} else {return true}; ");

    Mas para mim, está meio gambiarra isso, queria simplesmente desabilitar o outro butão de cadastro da página, quando apertasse enter durante o focus do cxteste.

    Alguém tem alguma sugestão?

    obrigado

    quinta-feira, 31 de janeiro de 2013 20:30

Respostas

  • @Angelo.Net,

    Fiz um pequeno exemplo usando jQuery Ajax e Page Method. Só tens que alterar o código server side para ires a BD buscar os outros dois códigos.

    ASPX:

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="AjaxCall._Default" %>
    
    <!DOCTYPE html>
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
        <script src="Scripts/jquery-1.9.0.min.js"></script>
    </head>
    <body>
        <form>
            <div>
                <div>
                    Input:
                </div>
                <input type="text" id="txt_1" placeholder="Type something…" onkeyup="javascript: Search(this);"/>
                <div>
                    Result:
                </div>
                <input type="text" id="txt_2"/>
                <input type="text" id="txt_3"/>
            </div>
        </form>
        <script type="text/javascript" language="javascript">
            function Search(textbox) {
                MakeRequest(textbox.value);
            }
    
            function MakeRequest(value) {
                
                var dataToSend = '{\"txtValue\":' + value + '}';
    
                var request = $.ajax({
                    url: "Default.aspx/GetServerValues",
                    type: "POST",
                    data: dataToSend,
                    contentType: "application/json; charset=utf-8",
                    dataType: "json"
                });
    
                request.done(function (response) {
                    $('#txt_2').val(response.d[0]);
                    $('#txt_3').val(response.d[1]);
                });
    
                request.fail(function (XMLHttpRequest, textStatus, errorThrown) {
                    alert("Request failed: " + textStatus);
                });
            }
            
        </script>
    </body>
    </html>
    

    CodeBehind:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Script.Services;
    using System.Web.Services;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    
    namespace AjaxCall
    {
        public partial class _Default : Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
    
            }
    
            [WebMethod(EnableSession = true)]
            [ScriptMethod(ResponseFormat = ResponseFormat.Json, XmlSerializeString = true, UseHttpGet = false)]
            public static string[] GetServerValues(string txtValue)
            {
                return new[]{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), "Powered by João Manso"};
            }
        }
    }

    Podes fazer download do código aqui -> https://github.com/JnManso/Msdn


    segunda-feira, 4 de fevereiro de 2013 22:14

Todas as Respostas

  • Bom dia @Angelo.Net, 

    Em vez de ligares o autopostback a true na textbox para colocar a informação nas outras duas textbox.

    Podes usar a framework Knockout (http://knockoutjs.com) para fazer a sincronização. 

    Ve o exemplo http://knockoutjs.com/examples/helloWorld.html é muito semelhante ao que pretendes  fazer.

    Espero ter ajudado.

    sexta-feira, 1 de fevereiro de 2013 11:09
  • Olá João, muito obrigado, já me deu uma boa direção.

    No caso quando eu digito o código no campo tbTeste,  através de um dataset eu pego esse código e pesquiso no BD para trazer outros dois códigos em outros 2 textbox, como posso usar este exemplo neste caso?

     DataSet dsteste = ControlCod.trazerCod(this.tbTeste.Text);
     this.tbcod1.Text = Convert.ToString(dsteste.Tables["bdcod"].Rows[0]["peq1"]).ToUpper();
     this.tbcod2.Text = Convert.ToString(dsteste.Tables["bdcod"].Rows[0]["peq2"]).ToUpper();

    Desculpe, é porque nunca utilizei esse knockoutjs.

    Obrigado

    sexta-feira, 1 de fevereiro de 2013 17:52
  • @Angelo.Net,

    Uma vez que tens que ir à BD buscar\trazer outros códigos. Usava uma solução com jQuery.Ajax() (http://api.jquery.com/jQuery.ajax/).

    Assim, que tiver oportunidade faço-te um exemplo de código.



    segunda-feira, 4 de fevereiro de 2013 09:29
  • @Angelo.Net,

    Fiz um pequeno exemplo usando jQuery Ajax e Page Method. Só tens que alterar o código server side para ires a BD buscar os outros dois códigos.

    ASPX:

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="AjaxCall._Default" %>
    
    <!DOCTYPE html>
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
        <script src="Scripts/jquery-1.9.0.min.js"></script>
    </head>
    <body>
        <form>
            <div>
                <div>
                    Input:
                </div>
                <input type="text" id="txt_1" placeholder="Type something…" onkeyup="javascript: Search(this);"/>
                <div>
                    Result:
                </div>
                <input type="text" id="txt_2"/>
                <input type="text" id="txt_3"/>
            </div>
        </form>
        <script type="text/javascript" language="javascript">
            function Search(textbox) {
                MakeRequest(textbox.value);
            }
    
            function MakeRequest(value) {
                
                var dataToSend = '{\"txtValue\":' + value + '}';
    
                var request = $.ajax({
                    url: "Default.aspx/GetServerValues",
                    type: "POST",
                    data: dataToSend,
                    contentType: "application/json; charset=utf-8",
                    dataType: "json"
                });
    
                request.done(function (response) {
                    $('#txt_2').val(response.d[0]);
                    $('#txt_3').val(response.d[1]);
                });
    
                request.fail(function (XMLHttpRequest, textStatus, errorThrown) {
                    alert("Request failed: " + textStatus);
                });
            }
            
        </script>
    </body>
    </html>
    

    CodeBehind:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Script.Services;
    using System.Web.Services;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    
    namespace AjaxCall
    {
        public partial class _Default : Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
    
            }
    
            [WebMethod(EnableSession = true)]
            [ScriptMethod(ResponseFormat = ResponseFormat.Json, XmlSerializeString = true, UseHttpGet = false)]
            public static string[] GetServerValues(string txtValue)
            {
                return new[]{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), "Powered by João Manso"};
            }
        }
    }

    Podes fazer download do código aqui -> https://github.com/JnManso/Msdn


    segunda-feira, 4 de fevereiro de 2013 22:14