2009-04-07 14 views
6

ben kod arkasında vücut elemanını erişmek mümkün olması gerekiyor çünkü runat="server" belirledikvücut runat = "server" neden derleme hatası

<body id="body" runat="server"> 

aşağıdaki biçimlendirme var.

Şimdi bu gibi body onload olaya bir JavaScript işlevi çağrısını eklemek istiyorum: Ancak

<body id="body" runat="server" onload="someJavaScriptFunction();"> 

, bu sembol someJavaScriptFunction çözülemiyor" bir mesaj ile, benim bir derleme hatası veriyor() ;". Uygulamayı çalıştırırsam, bana bir hata geldiğini anladım (

Burada neler oluyor? onload bir istemci tarafı olayıdır, bu yüzden ASP.NET derleyicisi buna neden önem veriyor?

cevap

15

Bunu arkadaki kodda eklemeniz gerekir; bir etikete runat="server" ekleme

protected void Page_Load(object sender, EventArgs e) 
{ 
    body.Attributes.Add("onload", "someJavaScriptFunction();"); 
} 

açıkça öneki olanlar (örn <asp:Panel />) biri olmasa bile, bir sunucu etiketi yapar. Sunucu etiketlerinde, herhangi bir onXXXX olay işleyicisi, istemci tarafı olayları değil, sunucu tarafı olaylarını ele alır ("İstemci" açık olarak çağrıldığında, örneğin, OnClient Düğmeler için tıklatıldığında). ASP sayfasında kod parçası olarak vücut etiketinin içinde senaryoyu yorumlamak için çalışıyor, çünkü bu oluyor

<head> 
    <script language="text/javascript"> 
    window.onload = function() { someJavaScriptFunction(); } 
    </script> 
</head> 

:

+0

gibi, bunun nasıl işe yarayacağını görebiliyorum - ama neden runat = "server" ekleniyor bu yaklaşımı kullanmam gerektiği anlamına mı geliyor? –

+0

Sanırım arkadaki kodda Body_SomeJavaScriptFunction yöntemini arıyor çünkü “sunucuda çalıştır” dedin? –

+0

Doğru ... Cevabınızı ekledim Ian, umarım sakıncası yoktur :) –

3

O ayarlamak için bir seçenektir. Sanki C#/VB ...

+0

Bu, "Burada neler oluyor?" Sorularına cevap vermiyor. ve "ASP.NET derleyicisi buna neden önem veriyor?" – Cerebrus

+0

Bu, senaryoda, en sonunda gittiğim yaklaşımdır. –