2010-03-11 9 views
6

Ich benutze asp.net 3.5 mit C#. Ich muss eine Datenbanksuche durchführen, wenn ein Benutzer ProductID in txtProductID eingibt. Ich denke, dass Javascript nicht in Frage kommt, da dies Server Side Call sein muss. Ich schrieb diesen Code in dem Ereignis Page Load der Webseite:Eine Datenbankabfrage auf Textbox onblur Ereignis

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

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

Ich erhalte eine Fehlermeldung: Microsoft JScript-Laufzeitfehler: Objekt erwartet Wie kann ich dieses Problem lösen?

Antwort

3

Verwenden Sie das Ereignis TextBox.TextChanged.

ASPX-Markup:

<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

Beachten Sie, dass diese Antwort PostBack verursacht, während @ durilai dies nicht tut. – jrummell

1

Dies sollte den Trick, wie hier verwiesen: http://www.codedigest.com/CodeDigest/80-Calling-a-Serverside-Method-from-JavaScript-in-ASP-Net-AJAX---PageMethods.aspx

Dies sind die Kontrollen

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

Dies ist Javascript

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

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

function OnFailure(error) { 
} 
</script> 

Dieser den Server sidewebmethod

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

^^ während Sie bereits ein UpdatePanel verwenden, was eine bessere Methode ist, um dieses Verhalten zu erreichen, den Ereignishandler onTextChanged oder den von Ihnen vorgeschlagenen PageMethods-Weg? – Dienekes

+0

Es kommt darauf an. Willst du ein Postback? Wenn das der Fall ist, dann ist der 'ontextchanged' wahrscheinlich der richtige Weg. Ich habe meine Antwort um sein Markup geschrieben, während die Antwort von @ Jrummel weniger Code enthält. –

5

onblur ist eine clientseitige Ereignis. LookupProduct ist eine serverseitige Methode. Sie können nicht aufeinander verweisen - es gibt einfach keine Verbindung zwischen den beiden.

Es gibt keine schnelle Lösung dafür - Sie müssen entweder ein Postback für das Client-Ereignis auslösen() oder einen Ajax-Callback mit einer Bibliothek wie Microsoft ASP.NET Ajax implementieren.

Alternativ, wenn Sie nicht wirklich braucht auf jeder Unschärfe dieses Ereignis ausgelöst, und nur dann, wenn der Text hat verändert, dann können Sie einfach das serverseitige TextBox.OnChanged Ereignis verwenden, und legen Sie die AutoPostBack Eigenschaft des TextBox true . Achte darauf, dass du dich daran erinnerst, AutoPostBack einzustellen, sonst wirst du nirgends hinkommen.

+0

Das Ereignis muss auf LostFocus/onBlur der TextBox ausgelöst werden – user279521

+0

@ user279521: Es gibt keine Server-Seite 'LostFocus' Ereignis in ASP.NET, also wenn Sie es bis zu dem' Onblur'-Ereignis verdrahten müssen, dann brauchen Sie um das Postback/Callback wie im zweiten Absatz angegeben aufzubauen. – Aaronaught

+0

@ user279521. Sehen Sie sich meine Antwort an, mit der Sie eine serverseitige Methode von einem beliebigen JavaScript-Ereignis aufrufen können. –

Verwandte Themen