2010-03-11 7 views
6

Estoy usando asp.net 3.5 con C#. Necesito hacer una búsqueda en la base de datos cuando un usuario ingresa ProductID en txtProductID. Supongo que no es posible hacer javascript, ya que tendrá que ser una llamada del lado del servidor. de escribir este código en el evento Page_Load de la página web:Hacer una consulta en la base de datos en el evento de textbox onblur

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

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

me sale un mensaje de error: Error de tiempo de ejecución de Microsoft JScript: Objeto espera ¿Cómo puedo resolver esto?

Respuesta

3

Utilice el evento TextBox.TextChanged.

ASPX marcado:

<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

Tenga en cuenta que esta respuesta causará PostBack mientras que @ durilai no lo hará. – jrummell

1

Esto debería hacer el truco, como se indica aquí: http://www.codedigest.com/CodeDigest/80-Calling-a-Serverside-Method-from-JavaScript-in-ASP-Net-AJAX---PageMethods.aspx

Estos son los controles

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

Este es el Javascript

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

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

function OnFailure(error) { 
} 
</script> 

Este es el servidor sidewebmethod

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

^^ mientras usa un UpdatePanel, que es una mejor manera de lograr este comportamiento, el controlador de eventos onTextChanged o su método sugerido de PageMethods? – Dienekes

+0

Depende. ¿Quieres una devolución de datos? Si es así, el 'ontextchanged' es probablemente el camino a seguir. Escribí mi respuesta alrededor de su marcado, mientras que la respuesta de @ jrummel tiene menos código. –

5

onblur es un evento de cliente. LookupProduct es un método del lado del servidor. No se puede hacer referencia a una de la otra, simplemente no hay asociación alguna entre las dos.

No hay una solución rápida para esto: tiene que activar una devolución de datos en el evento del cliente (usando ClientScriptManager.GetPostBackEventReference) o implementar una devolución de llamada Ajax usando una biblioteca como Microsoft ASP.NET Ajax.

Alternativamente, si usted realmente no necesita para disparar este evento en cada desenfoque, y sólo cuando el texto tiene cambiado, entonces puede simplemente utilizar el TextBox.OnChanged evento del lado del servidor y establezca la propiedad del cuadro de texto AutoPostBack a true . Asegúrese de recordar establecer AutoPostBack, de lo contrario, esto no lo llevará a ninguna parte.

+0

El evento debe activarse en LostFocus/onBlur del TextBox – user279521

+0

@ user279521: no hay ningún evento 'LostFocus' del lado del servidor en ASP.NET, por lo que si debe conectarlo al evento' onblur', entonces necesita para construir la devolución/devolución de llamada como se indica en el segundo párrafo. – Aaronaught

+0

@ user279521. Mira mi respuesta a continuación que te permitirá llamar a un método del lado del servidor desde cualquier tipo de evento de JavaScript. –

Cuestiones relacionadas