2010-03-11 24 views
6

Tôi đang sử dụng asp.net 3.5 với C#. Tôi cần thực hiện tra cứu cơ sở dữ liệu khi người dùng nhập ProductID vào txtProductID. Tôi đoán làm javascript là ra khỏi câu hỏi vì điều này sẽ phải được gọi phía máy chủ. tôi đã viết mã này trong sự kiện Page_Load của trang web:Thực hiện truy vấn cơ sở dữ liệu trên sự kiện Textbox onblur

 protected void Page_Load(object sender, EventArgs e) 
    { 
     txtProductID.Attributes.Add("onblur", "LookupProduct()"); 
    } 

     protected void LookupProduct() 
    { 
     //Lookup Product information on onBlur event; 
    } 

tôi nhận được một thông báo lỗi: Microsoft JScript runtime lỗi: Object dự kiến ​​ Làm thế nào tôi có thể giải quyết này?

Trả lời

3

Sử dụng sự kiện TextBox.TextChanged.

ASPX đánh dấu:

<asp:TextBox ID="txtProductID" runat="server" AutoPostBack="true" OnTextChanged="txtProductID_TextChanged" /> 

codebehind:

protected void txtProductID_TextChanged(object sender, EventArgs e) 
{ 
    // do your database query here 
} 
+0

Lưu ý rằng câu trả lời này sẽ gây ra PostBack trong khi @ durilai sẽ không. – jrummell

1

này nên làm như lừa, như tham chiếu ở đây: http://www.codedigest.com/CodeDigest/80-Calling-a-Serverside-Method-from-JavaScript-in-ASP-Net-AJAX---PageMethods.aspx

Đây là những điều khiển

<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="True" /> 
<asp:TextBox ID="txtTest" onblur="LookupProduct()" runat="server" /> 

Đây là Javascript

<script language="javascript"> 
function LookupProduct() 
{ 
    PageMethods.LookupProduct('',OnSuccess, OnFailure); 
} 

function OnSuccess(result) { 
    if (result) 
    { 
    } 
} 

function OnFailure(error) { 
} 
</script> 

Đây là máy chủ sidewebmethod

[WebMethod] 
public static bool LookupProduct() 
{ 
    return true; 
} 
+0

^^ trong khi đã sử dụng UpdatePanel, đây là cách tốt hơn để đạt được hành vi này, trình xử lý sự kiện onTextChanged hoặc cách PageMethods được đề xuất của bạn? – Dienekes

+0

Nó phụ thuộc. Bạn có muốn đăng lại không? Nếu vậy thì 'ontextchanged' có lẽ là cách để đi. Tôi đã viết câu trả lời của tôi xung quanh đánh dấu của mình, trong khi câu trả lời của @ jrummel có ít mã hơn. –

5

onblur là một sự kiện client-side. LookupProduct là một phương pháp phía máy chủ. Bạn không thể tham khảo cái này từ cái kia - đơn giản là không có sự kết hợp nào giữa hai cái.

Không khắc phục nhanh sự cố này - bạn phải kích hoạt đăng lại sự kiện khách hàng (sử dụng ClientScriptManager.GetPostBackEventReference) hoặc triển khai gọi lại Ajax bằng thư viện như Microsoft ASP.NET Ajax.

Ngoài ra, nếu bạn không thực sự cần kích hoạt sự kiện này trên tất cả mờ, và chỉ khi văn bản có thay đổi, sau đó bạn chỉ có thể sử dụng các sự kiện server-side TextBox.OnChanged và thiết lập thuộc tính AutoPostBack của TextBox để true . Đảm bảo bạn nhớ đặt AutoPostBack, nếu không, điều này sẽ không đưa bạn đến bất kỳ đâu.

+0

Sự kiện cần được kích hoạt trên LostFocus/onBlur của TextBox – user279521

+0

@ user279521: Không có sự kiện 'LostFocus' phía máy chủ nào trong ASP.NET, vì vậy nếu bạn phải kết nối nó với sự kiện' onblur', thì bạn cần để xây dựng postback/callback như được chỉ ra trong đoạn thứ hai. – Aaronaught

+0

@ user279521. Nhìn vào câu trả lời của tôi dưới đây sẽ cho phép bạn gọi một phương thức phía máy chủ từ bất kỳ loại sự kiện JavaScript nào. –

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