2011-03-23 18 views
16

'dan sonra bir Javascript İşlevi'ni çağırın Temel olarak, UpdatePanel'ımda codebehind'imdeki bir yönteme dayanan bir javascript dizisi oluşturan bir hazır bilgi sahibiyim.UpdatePanel Postback Issue

İçeriğimi sayfa yüküne yükleme konusunda bir sorunum yok. Ancak, javascript dizilimini benim updatepanel içinde güncellemek için bir arama yapmayı dener ve yürütürsem, javascript'in zaten tetiklendikten sonra literalin geri yükleme sırasında güncelleneceğini buldum.

<script type="text\javascript"> 
function BindMyFunction(itemList) 
{ 
    //Do something 
} 
</script> 

<asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
<ContentTemplate> 
<!-- Literal containing generated JS array --> 
    <asp:Literal ID="ProfileJavscriptOutput" runat="server"></asp:Literal> 
    <ul id="person-search"> 
    <li><asp:TextBox ID="TxtFirstname" runat="server" Text=""></asp:TextBox></li> 
    <!-- Update Literal onClick --> 
     <li><asp:ImageButton CssClass="searchbtn" ID="ImageButton1" runat="server" OnClick="ImageButton1_Click" /></li> 
    </ul>  
    <!-- Some jCarousel rendered --> 
</asp:UpdatePanel> 

Ben, şu yayınlarda bakarak oldum: İşte

Ne sahip temel bir örnektir

ASP.NET - UpdatePanel and JavaScript

call javascript after updatepanel postback

Ama yapamam koduma doğru şekilde uygulanmış görünüyor.

Bir UpdatePanel kullanmadığımda iyi çalışıyor. Ancak, aramalar yapıldığında sayfa konumunun hareket etmemesi şarttır.

+0

önce ve ne gibi kod bakmak o sonra neye benziyor mu? –

+0

Tam sayfa yüklendiğinde JavaScript nasıl adlandırılır? –

+11

Annenizin hiç size güncelleme panellerinin kötü olduğunu söylemedi mi? –

cevap

25

Eğer Page_Load olayına aşağıdaki kodu ekleyebilirsiniz:

ScriptManager.RegisterStartupScript(Me.rptGridAlbum, rptGridAlbum.GetType, "scriptname", "somejavascript", True) 

Bu AJAX callback'inde sonra sayfasında javascript tetiklenir.

MSDN

+0

Bu işe yaradı Evet, temel verileri almak için ScriptManager.RegisterStartupScript denir ve daha sonra aramaları Javascript'i güncelleştirmek için yaptım. – R100

+19

Çok kötü, argümanların daha iyi bir açıklaması verilmemişse, aksi halde bu cevap muhtemelen daha fazladır Oy ver –

+2

Tüm javascript dosya notunu eklemek istiyorsanız, 4. parametrenin dosyanın yolunu değil, gerçek javascript içeriği. File.ReadAllText (Server.MapPath ("~/Virtual/Path/To/File.js"))) '' – TJB

0

Javascript dizisini gerektiğinde sayfaya döndüren ve bu web servisine javascript yöntemiyle çağrıyı ileten basit bir web servis yöntemi oluşturabilirsiniz. Tarayıcı tarafında bellekte diziyi yenilemek için javascript yöntemini çağırmak, herhangi bir başarı ile UpdatePanel geri gönderimlerinde yeniden ayrıştırmak için js dizisi değişmezini beklemekten daha iyi çalışır.

+0

UpdatePanel geri yüklemesinde bir JS dizisinin güncellenmesi, muhtemelen ['ScriptManager.RegisterArrayDeclaration'] (https://msdn.microsoft.com/en-us/library/bb292362%28v=vs.110%29.aspx) kullanılarak daha iyi yapılır. – Abel

0
var prm = Sys.WebForms.PageRequestManager.getInstance(); 
if (prm != null) { 
    prm.add_endRequest(function (sender, e) { 
     if (sender._postBackSettings.panelsToUpdate != null) { 
      DisplayCurrentTime(); // here your javascript function 
     } 
    }); 
};