2012-01-02 39 views
10

Tôi đang sử dụng một bảng điều khiển ASP.NET cập nhật để lấy thông tin người dùng sử dụng trên TextChanged cho hộp văn bản, đây là mã của tôi:Tại sao một asp.net OnTextChanged không làm việc

<asp:UpdatePanel runat="server" ID="up1" ChildrenAsTriggers="true"> 
<ContentTemplate> 
    <asp:TextBox runat="server" ID="loginEmail" Text="Email" 
     CssClass="textBoxes" OnTextChanged="userInfo" AutoPostBack="true"></asp:TextBox> 
</ContentTemplate> 
<Triggers> 
    <asp:AsyncPostBackTrigger ControlID="loginEmail" EventName="TextChanged" /> 
</Triggers> 
</asp:UpdatePanel> 

và mã đằng sau:

string url, emailInfo; 
emailInfo = loginEmail.Text; 
url = Membership.GetUserNameByEmail(emailInfo); 

emailText.InnerText = "Email: " + emailInfo; 
urlText.InnerText = "Webiste: http://www.Elwazefa.com/User/" + url ; 

mã sẽ không nổ súng vào TextChanged nhưng nó wil, trên ButtonClick hoặc PageLoad.

Sự cố là gì?

Sử dụng ASP.NET 4,0

+0

Nếu bạn không thể tổng hợp câu hỏi đầy đủ trong tiêu đề ... có thể là quá tổng quát hoặc thiếu cấp độ khắc phục sự cố thích hợp. (Trong trường hợp này, tất cả đều thiếu phần lớn bối cảnh áp dụng và mô tả đầy đủ về cách nó "không hoạt động".) –

+0

Bạn có thể hiển thị chức năng "userInfo" hoàn chỉnh của mình không? –

+0

TextChanged không kích hoạt trên mọi phím tắt, nếu đó là những gì bạn đang làm sau: http://stackoverflow.com/questions/826023/problem-with-textbox-inside-updatepanel-not-causing-ontextchanged-event và http: // stackoverflow.com/questions/1009086/how-to-make-an-asp-net-textbox-fire-its-ontextchanged-event-fire-in-an-ajax-upd. – patmortech

Trả lời

10
<asp:TextBox AutoPostBack="true" OnTextChanged="thingId_TextChanged" ID="thingId" runat="server"></asp:TextBox> 

AutoPostBack trên văn bản hộp sẽ kích hoạt sau khi trở lại tập trung bị mất từ ​​hộp văn bản. Sự kiện TextChanged sẽ được kích hoạt sau bất kỳ lần đăng sau nào (có thể là do thay đổi tiêu điểm của nút hoặc nhấn vào hộp văn bản). Vì vậy, bạn cần phải chắc chắn

  1. Sau khi văn bản được thay đổi, bạn đang di chuyển ra khỏi văn bản hộp
  2. Dù điều khiển mà bạn đang thay đổi là một phần của bản cập nhật phẳng (có thể cập nhật bảng khác nhau). Nếu không có một phần của bất kỳ bảng cập nhật nào thì những thay đổi đó sẽ không được phản ánh ở phía máy khách.

Tôi đoán có thể bạn đang phải chịu đựng # 2. Bạn có thể sử dụng công cụ như Fiddler (hoặc Firebug trên FireFox) để kiểm tra xem trình duyệt có đang kích hoạt yêu cầu AJAX (XHR) khi tiêu điểm bị mất khỏi hộp văn bản hay không.

+0

có vấn đề của tôi là # 2, cảm ơn bạn – Wahtever

4

Khi @VinayC đăng, AutoPostBack có nghĩa là trang sẽ đăng lại máy chủ khi số TextBox của bạn bị mất tiêu điểm. Không có sự kiện tích hợp nào gây ra postback trên mỗi ký tự được thêm vào đầu vào văn bản và vì lý do chính đáng. UpdatePanel đăng lại không khiến trang nhấp nháy, nhưng chúng có thể nặng như một bài đăng đầy đủ.

Nếu bạn muốn làm việc xung quanh này, bạn có thể cho textbox của bạn một sự kiện handler clientonchanged, JavaScript trong số đó sẽ được xây dựng từ Page.ClientScript.GetPostBackEventReference().

Giải pháp chính xác sẽ sử dụng lời gọi phương thức AJAX từ mã JavaScript của bạn chứ không phải là UpdatePanel đăng lại một phần trong onchanged.

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