Usuário com melhor resposta
Postback em textbox com autocompletar

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
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
- Marcado como Resposta Ricardo RussoModerator quarta-feira, 6 de fevereiro de 2013 13:50
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.
- Sugerido como Resposta Ricardo RussoModerator segunda-feira, 4 de fevereiro de 2013 12:44
-
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
-
@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.
-
@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
- Marcado como Resposta Ricardo RussoModerator quarta-feira, 6 de fevereiro de 2013 13:50