2009-06-17 9 views
9

私は、フォーカスが失われたときだけ発射するのではなく、キーストロークが行われるたびにonTextChangedイベントを発生させるためにtextBoxを取得しようとしています。私は、AsyncPostBackTriggerを追加するとこれを行うと思ったが、まだ動作していないと思った。私がしようとしていることは可能なのでしょうか?コードは以下の通りです:んASP.NET TextBoxを作成する方法AJAX UpdatePanelでonTextChangedイベントが発生しますか?

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Items.aspx.cs" MasterPageFile="~/MMPAdmin.Master" Inherits="MMPAdmin.Items" %> 
<asp:Content ID="content1" runat="server" ContentPlaceHolderID="ContentPlaceHolder1"> 
<asp:ScriptManager ID="sm_Main" runat="server" /> 
    <div style="left:10px;position:relative;width:100%;overflow:hidden"> 
     <asp:UpdatePanel ID="up_SearchText" runat="server"> 
      <Triggers> 
       <asp:AsyncPostBackTrigger ControlID="tb_Search" EventName="TextChanged" /> 
      </Triggers> 
      <ContentTemplate> 
       <div style="position:relative;float:left"> 
        <b style="font-size:xx-large">Items</b>(<a href="Item.aspx">Add New</a>) 
       </div> 
       <div style="right:25px;position:absolute; top:30px"> 
        Search: <asp:TextBox ID="tb_Search" runat="server" Width="200" OnTextChanged="UpdateGrid" AutoPostBack="true" /> 
       </div> 
       <br /> 
       <div> 
        <asp:GridView runat="server" AutoGenerateColumns="true" ID="gv_Items" AutoGenerateEditButton="true" AutoGenerateDeleteButton="true" /> 
       </div> 
      </ContentTemplate> 
     </asp:UpdatePanel> 
    </div> 
</asp:Content> 

答えて

12
  • onkeyupがjavascriptを使用して発生したときに、テキストボックスコントロールに_postback()関数を呼び出す必要があります。
  • ただし、テキストボックスは更新パネルの内側にあるため、ユーザーがキーを押すたびにテキストボックスが再レンダリングされ、カーソルのフォーカスが緩くなります。
  • テキストボックスをupdatepanelから取り出さない限り、これは使用できません。それはあなたのためにうまくいくかもしれません、更新パネルが少し遅くなる傾向があるので、あなたはまだ使いやすさの問題があるかもしれません。 - オートコンプリートコンポーネントの使用をお勧めします。

P.S:そこにasp.netコントロールツールキットの1であるか、私は少し改善することを発見したjqueryのオートコンプリートのプラグインを使用することができます。

+2

...私たちは、次のコードを使用することができます ...そのは、AJAXをコントロールし、それを使用する義務はない..ですAJAXの可用性をチェックするためにコントロールを使用する必要があります: onTextChangeイベントはポストバック時にのみ発生し、テキストボックスへの更新時には発生しません。 OPが探しているのは、JavaScript onKeyPressイベントに近いものです。 @Smercerはあなたの最善の策が上記のコンポーネントの1つであることは間違いありません。 –

+0

私は何をする必要があるのか​​を達成するためにオートコンプリートコンポーネントをどのように使うのかはっきりしていません。私はテキストボックスのonkeyupイベントにフォーカスをバウンスするためにjavascriptを使用することを望んでいたが、テキストボックスは毎回フォーカスを緩めると言ったように。私が更新パネルからテキストボックスを取り除くと、イベントは何か入力するたびにポストバックを引き起こしますが、これは動作しません。 rerenders後にテキストボックスにフォーカスを割り当てることは可能でしょうか? –

+1

私は "バウンスフォーカス"と言うとき、これは私が話していることです: function BounceFocus(){ var element = document.getElementById( '<%= tb_Search.ClientID%>'); element.blur(); ; element.focus(); } –

0

すべてAsyncPostBackTriggerは確認しているだけでページのその部分は、イベントが発生したときにイベントが発生したとき、それは変更されません更新されます。

私はあなたがしたいことをすることは可能だと思いますが、手動でイベントを発生させるためにJavaScriptコードを書く必要があります...そして、私はそのことについて考えたくありません。

0

いけないだけの@ smercerの応答に追加する

<iframe> 
<asp:TextBox ID="TextBox1" runat="server" AutoPostBack="true" ontextchanged="TextBox1_TextChanged"></asp:TextBox> 

protected void TextBox1_TextChanged(object sender, EventArgs e) 
    { 
     RequiredFieldValidator1.ErrorMessage = ""; 
     Label1.Text = ""; 
     string name = TextBox1.Text.ToString(); 
     string constr = "data Source=MURALY-PC\\SQLEXPRESS; database=Online; Integrated Security=SSPI"; 
     SqlConnection con = new SqlConnection(constr); 
     con.Open(); 
     string query = "select UserName from User_tab where UserName='" + name + "'"; 
     SqlCommand cmd = new SqlCommand(query, con); 
     SqlDataReader dr = cmd.ExecuteReader(); 
     if (dr.Read()) 
     { 

      Label1.Text = "UserName Already Exists"; 
     } 
     else 
     { 
      Label1.Text = ""; 
      Label1.Text = "UserName Available"; 
     } 
     con.Close(); 


    } 
</iframe> 
+0

これは、GridViewのデータがどのように更新されるか、しかしながら。これがUpdatePanelの理由です。テキストボックスデータだけではなくテキスト通知をトリガーするだけでなく、変更の結果としてGridViewが更新されるためです。 AJAXを使用しないでラベルにデータをオンオフで表示することは可能ですが、データテーブルをラベルに追加するのは、UpdatePanelsが必要なGridViewよりもずっと面倒です。 – vapcguy

関連する問題