2010-03-11 10 views
6

Sto usando asp.net 3.5 con C#. Devo eseguire una ricerca nel database quando un utente inserisce ProductID in txtProductID. Suppongo che fare javascript sia fuori questione dal momento che questa dovrà essere chiamata lato server. Ho scritto questo codice nell'evento Page Load della pagina web:Effettua una query di database su evento onblur Textbox

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

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

ricevo un messaggio di errore: Errore di runtime Microsoft JScript: Previsto oggetto Come posso risolvere questo?

risposta

3

Utilizzare l'evento 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

Si noti che questa risposta causerà Postback mentre @ durilai no. – jrummell

1

Questo dovrebbe fare il trucco, come riferito qui: http://www.codedigest.com/CodeDigest/80-Calling-a-Serverside-Method-from-JavaScript-in-ASP-Net-AJAX---PageMethods.aspx

Questi sono i controlli

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

Questo è il Javascript

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

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

function OnFailure(error) { 
} 
</script> 

Questo è il server sidewebmethod

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

^^ mentre già si utilizza un UpdatePanel, che è un modo migliore per ottenere questo comportamento, il gestore di eventi onTextChanged o il metodo PageMethods suggerito? – Dienekes

+0

Dipende. Vuoi un postback? Se è così allora il 'ontextchanged' è probabilmente la strada da percorrere. Ho scritto la mia risposta intorno al suo markup, mentre la risposta di @ jrummel ha meno codice. –

5

onblur è un evento lato client. LookupProduct è un metodo sul lato server. Non puoi fare riferimento all'uno - non c'è semplicemente alcuna associazione tra i due.

Non c'è soluzione rapida per questo - bisogna o innescare un postback sull'evento client (utilizzando ClientScriptManager.GetPostBackEventReference) o implementare un callback Ajax utilizzando una libreria come Microsoft ASP.NET Ajax.

In alternativa, se non si ha realmente bisogno di sparare questo evento su ogni sfocatura, e solo quando il testo ha cambiato, allora si può semplicemente utilizzare il lato server TextBox.OnChanged evento e impostare la proprietà del TextBox AutoPostBack a true . Assicurati di ricordare di impostare AutoPostBack, altrimenti questo non ti porterà da nessuna parte.

+0

L'evento deve essere attivato su LostFocus/onBlur del TextBox – user279521

+0

@ user279521: Non c'è nessun evento 'LostFocus' sul lato server in ASP.NET, quindi se è necessario collegarlo all'evento' onblur', allora è necessario per costruire il postback/callback come indicato nel secondo paragrafo. – Aaronaught

+0

@ user279521. Guarda la mia risposta qui sotto che ti permetterà di chiamare un metodo lato server da qualsiasi tipo di evento JavaScript. –

Problemi correlati