2010-03-11 19 views
6

Asp.net 3.5 C# ile kullanıyorum. Bir kullanıcı ProductID ürününe txtProductID girdiğinde bir veritabanı araması yapmam gerekiyor. Ben javascript yapıyor sanırım bu sunucu tarafında çağrı olması gerekecek çünkü. Microsoft JScript çalışma zamanı hatası: Metin kutusu onblur olayında bir veritabanı sorgusu yapın

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

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

bir hata mesajı alıyorum: Ben web sayfasının page_load olayı bu kodu yazdım Nesne Bunu nasıl çözebilirsiniz beklenen? Burada başvurulan olarak

cevap

3

TextBox.TextChanged olayını kullanın.

ASPX işaretleme:

<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

Bu cevabın PostBack'e neden olacağını unutmayın; @ durilai ise olmaz. – jrummell

1

Bu, hile yapmak gerekir: http://www.codedigest.com/CodeDigest/80-Calling-a-Serverside-Method-from-JavaScript-in-ASP-Net-AJAX---PageMethods.aspx

Bu kontroller

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

Bu JavaScript olduğunu

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

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

function OnFailure(error) { 
} 
</script> 

Bu sunucu sidewebmethod

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

^^ Bu zaten bir UpdatePanel kullanırken, bu davranışa ulaşmak için daha iyi bir yol olan onTextChanged olay işleyicisi veya önerilen PageMethods yönteminiz nedir? – Dienekes

+0

Bu bağlıdır. Bir geri bildirim istiyor musun? Eğer öyleyse o zaman “değişmez” muhtemelen gitmenin yoludur. Cevabımı işaretinin etrafında yazdım, @ jrummel'in cevabı daha az kod içeriyor. –

5

onblur bir istemci tarafı bir olaydır. LookupProduct bir sunucu tarafı yöntemidir. Birinden diğerine referans gösteremezsiniz - ikisi arasında ne olursa olsun bir ilişki yoktur.

Bunun için hızlı bir çözüm yok - istemci olayında (ClientScriptManager.GetPostBackEventReference kullanarak) bir geri bildirim tetiklemeniz veya Microsoft ASP.NET Ajax gibi bir kitaplık kullanarak bir Ajax geri çağırma uygulamanız gerekir.

Alternatif bunu yaparsanız, gerçekten her bulanıklık bu olayı gerekir ve metin sahip olduğunda o zaman basitçe sunucu tarafı TextBox.OnChanged olayı kullanıp true için TextBox'ın AutoPostBack özelliği ayarlayabilirsiniz, değişti . AutoPostBack'u ayarladığınızdan emin olun, aksi takdirde bu size herhangi bir yere ulaşmaz.

+0

Etkinliğin, TextBox – user279521

+0

@ user279521 adresindeki LostFocus/onBlur'da çalıştırılması gerekiyor: ASP.NET'te sunucu tarafı 'LostFocus' olayı yok, bu yüzden 'onblur' olayına bağlamanız gerekiyorsa o zaman ihtiyacınız olacak ikinci paragrafta belirtildiği gibi geri gönderme/geri çağırma yapmak için. – Aaronaught

+0

@ user279521. Aşağıda, herhangi bir JavaScript etkinliğinden bir sunucu tarafı yöntemini çağırmanıza izin verecek olan cevabıma bakın. –