2009-06-17 30 views
9

Tôi đang cố gắng để có được một textBox để cháy nó onTextChanged sự kiện mỗi khi một tổ hợp phím được thực hiện hơn là chỉ bắn chỉ khi nó mất tập trung. Tôi nghĩ rằng việc thêm AsyncPostBackTrigger sẽ làm điều này nhưng nó vẫn không hoạt động. Là những gì tôi đang cố gắng làm thậm chí có thể? Mã này là dưới đây:Làm thế nào để thực hiện một ASP.NET TextBox lửa nó onTextChanged cháy sự kiện trong một AJAX UpdatePanel?

<%@ 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> 

Trả lời

12
  • Bạn cần gọi hàm _postback() để điều khiển hộp văn bản khi số onkeyup được nâng lên bằng javascript.
  • Tuy nhiên, vì hộp văn bản của bạn nằm trong bảng cập nhật, hộp văn bản sẽ được hiển thị lại mỗi khi người dùng nhấn một phím, khiến con trỏ mất tập trung.
  • Điều này sẽ không thể sử dụng được trừ khi bạn lấy hộp văn bản ra khỏi bảng cập nhật. Điều đó có thể phù hợp với bạn, vì các bảng cập nhật có xu hướng hơi chậm, bạn vẫn có thể có vấn đề về khả năng sử dụng. - Tôi sẽ đề nghị sử dụng một thành phần tự động hoàn thành.

P.S: có một trong các công cụ kiểm soát asp.net hoặc bạn có thể sử dụng plugin jquery autocomplete mà tôi đã tìm thấy là tốt hơn một chút.

+2

Chỉ cần thêm để đáp ứng @ smercer: The sự kiện onTextChange chỉ kích hoạt khi đăng lại - không phải khi cập nhật vào hộp văn bản. Những gì OP đang tìm kiếm gần hơn với sự kiện JavaScript onKeyPress. @Smercer đúng là đặt cược tốt nhất của bạn là một trong những thành phần được đề cập. –

+0

Tôi không rõ ràng về cách tôi sẽ sử dụng thành phần tự động hoàn thành để thực hiện những gì tôi cần làm. Tôi đã hy vọng sử dụng javascript để trả sự tập trung vào sự kiện onkeyup cho hộp văn bản nhưng như bạn đã nói hộp văn bản mất tập trung mọi lúc. Nếu tôi lấy hộp văn bản ra khỏi bảng điều khiển cập nhật thì sự kiện sẽ gây ra một postback mỗi khi tôi gõ một cái gì đó mà sẽ không hoạt động. Nó có thể được chỉ định tập trung vào hộp văn bản sau khi nó rerenders? –

+1

Khi tôi nói "tiêu đề bị trả lại", đây là những gì tôi đang nói về: chức năng BounceFocus() { var element = document.getElementById ('<% = tb_Search.ClientID%>'); element.blur(); element.focus(); } –

0

Tất cả các AsyncPostBackTrigger làm là đảm bảo duy nhất mà phần trang làm mới khi sự kiện là bắn, nó không thay đổi khi sự kiện này bị sa thải.

Tôi nghĩ rằng nó có thể làm những gì bạn muốn, nhưng bạn cần phải viết một số mã javascript để tự kích hoạt sự kiện ... và tôi thậm chí không muốn nghĩ về việc đó.

0

Dont Cần sử dụng AJAX kiểm soát để kiểm tra sự sẵn có .. của nó là không bắt buộc phải sử dụng nó AJAX Controls .. Chúng ta có thể sử dụng đoạn mã sau ..

<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

Điều này không cho thấy cách dữ liệu trong GridView được cập nhật, Tuy nhiên. Đó là lý do cho UpdatePanel - không chỉ dữ liệu hộp văn bản thay đổi để kích hoạt một thông báo văn bản, nhưng cho GridView để cập nhật như là kết quả của sự thay đổi. Đúng là một nhãn có thể hiển thị dữ liệu theo kiểu thay đổi như thế này mà không có AJAX, nhưng đôi khi sẽ thêm nhiều bảng dữ liệu cơ sở dữ liệu vào nhãn hơn là GridView - yêu cầu UpdatePanels. – vapcguy

Các vấn đề liên quan