2011-05-17 14 views
8

3 kullanıcı denetimlerinden (ascx) oluşan bir aspx sayfam var.Her güncelleştirmede iç güncelleştirme panelinden javascript'i çalıştırın

<asp:UpdatePanel ID="UpdatePanelWrapper" runat="server"> 
    <ContentTemplate> 
     <uc1:UserControl1 ID="UserControl1" runat="server" />   
     <uc2:UserControl2 ID="UserControl2" runat="server"/> 
     <uc2:UserControl3 ID="UserControl3" runat="server"/> 
    </ContentTemplate> 
</asp:UpdatePanel> 

Ayrı tarafından her kullanıcı denetimi göstermek, "UserControl1" görüntülendiğinde bu yüzden, diğer 2 kullanıcı denetimleri gizlidir: Böyle 3 kullanıcı denetimlerini sarma bir güncelleme panel vardır.

"UserControl1" in içinde Bazı asp denetimleri ve bazı javascript işlevleri var. Benim sorunum, "UpdatePanelWrapper" yenilendiğinde bu javascript işlevlerinin hiçbir zaman çağrılmamasıdır.

Çalışmıyor olsa da "UserControl1" içinde javascript çağrısını ekleyerek bu çözümü http://blog.dreamlabsolutions.com/post/2009/02/24/jQuery-document-ready-and-ASP-NET-Ajax-asynchronous-postback.aspx denedim. Ben sadece bu javascript çağrıyı aspx sayfasına eklediğimde ancak "UserControl1" in içinde değilse çalışır hale getirdim.

Herhangi bir yardım için teşekkür ederiz, Teşekkürler.

cevap

11

UpdatePanel yanıt olarak döndürülen

<script type="text/javascript"> 

     Sys.Application.add_init(appl_init); 

     function appl_init() { 
      var pgRegMgr = Sys.WebForms.PageRequestManager.getInstance(); 
      pgRegMgr.add_endRequest(EndHandler); 
     } 

     function EndHandler() { 
     // This will be called whenever your updatepanel update 
     // It will be trigger after the update updatepanel 
     //add your javascript here 
     }               
    </script> 
+0

sayesinde bu benim için çalıştı yoludur. Aynı sayfada birkaç UC kullandığım için, bu kodu .aspx dosyasına ekledim, böylece "EndHandler" yönteminden herhangi bir js yöntemini çağırabilirim. – Fer

+0

Harika çözüm Muhammed! Önereceğim tek gelişme, özel bir olay ateşine sahip olmak olurdu. Bu şekilde, birden fazla işleyici "temel" komut dosyasını değiştirmeden, aynı aboneliği "temel" olarak yeniden uygulayarak veya "EndHandler" in üzerine yazmadan oluşturulabilir ve kullanılabilir. –

0

İdeal olarak, tüm JavaScript'iniz sayfanın en altında </body> etiketinin kapanışından hemen önce olmalıdır. jQuery kullanıyorsanız

, sen sayfa yenilendiğinde alır bile, live() veya delegate()emin olanlar olay işleyicileri kabarcık makyaj için kullanmak gerekir.

1

Eğer

Sys.Application.add_load (WireEvents) kullanabilir; //

<script language="javascript" type="text/javascript"> 
// <![CDATA[ 
    Sys.Application.add_load(WireEvents); // fix wiring for .NET ajax updatepanel 
    $(WireEvents); // handle page load wiring using jquery. This will fire on page load 


    function WireEvents() { 
       //do stuff here 
    }; 
// ]]> 
</script> 

oh ve bir daha şey gibi .NET ajax updatepanel

için düzeltme kablolama. funciton isimlerine dikkat et. Aksi takdirde bir karışıklık olacak. böylece temelde funciton adına _<%=this.ID%> ekleyerek bu

<script language="javascript" type="text/javascript"> 
// <![CDATA[ 
    Sys.Application.add_load(WireEvents_<%=this.ID%>); // fix wiring for .NET ajax updatepanel 
    $(WireEvents_<%=this.ID%>); // handle page load wiring 


    function WireEvents_<%=this.ID%>() { 

    };// end WireEvents_ 


// ]]> 
</script> 

gibi bir şey denemek kontrol bunların her birine, kendi işlevi var sesleniyor olmasını sağlar. Kontrolün birden çok örneğini alabileceğinizi varsayarak. Farklı kontroller için wireevents çağrılırken değil en azından o karışıklığı önlerse

burada
1

Scripts değerlendirilmez .... Bunu nasıl olduğunu. Doğru anladıysam, UpdatePanel görünümünde döndürülen bazı komut dosyası işlemlerini gerçekleştirmek istersiniz. evet ben buraya bu soruyu yanıtlamadı varsa

:

asp.net eval script in ajax html reponse

İlgili konular