2009-05-22 9 views
6

Her kısmi geri gönderme işleminden sonra JavaScript'i çalıştırmak için istemci tarafı olaylarına bağlanabileceğimi biliyorum; Ben tamamen benzer bir tarzda için oldukça straightfoward yol gizli alanları ile kesmek ve sonra her geri gönderme şey çalıştırmak, ama orada olmalı biliyorumUpdatePanel kısmi geri gönderme endRequest'ten sonra hangi JavaScript'in çalıştırılacağı nasıl denetlenir?

protected void FooClicked(object sender, EventArgs e) { 
     ClientScript.RegisterStartupScript(GetType(), "msg", "showMsg('Foo clicked');",true);   
} 

: ancak, böyle bir şey yapmak istiyorum bu.

cevap

9

Tanımladığınız belirli kod örneği, kısmi ard arda çalışmayla çalışmaz, çünkü ClientScript.RegisterStartupScript(), JS'yi istek yaşam döngüsünün çıktı oluşturma aşaması sırasında sayfaya yazar; kısmi bir geri gönderme, sayfanın yalnızca seçilen bir bölümünü JavaScript aracılığıyla günceller (başlangıç ​​komut dosyanız dahil, tüm sayfanın işaretlemesi sunucuda oluşturulmuş olsa bile).

yakından size UpdatePanel içinde bir Değişmez kontrolünü eklemek için merak, sizin tarif ettiğiniz şeyi taklit ve kısmi geri gönderme sırasında çalıştırmak istediğiniz komut dosyasına içerik panelinde metin özelliği ayarlamak için:

myLiteral.Text = "<script type=\"JavaScript\">doStuff();</script>"; 

Eğer işleyicisi içine geri gönderme sırasında oluşturulan bilgi aktarmak gerekirse

function endRequestHandler(sender, args) { 
    doStuff(); 
} 

Sys.WebForms.PageRequestManager.getInstance().add_endRequest(endRequestHandler); 

, bunu geçirebilirsiniz: IMO, daha uygun yolu geri gönderme tamamlandığında çalıştırmak için bir olay işleyicisi kaydetmek için client-side API for async postbacks kullanmaktırGizli alanlar aracılığıyla ve istemci tarafındaki işleyicinizdeki DOM'dan yakalayın.

+0

@Rex Gizli alanları ve olay dosyalarını her zaman dosyalamayı planlıyorum, ancak tanımladığıma benzer bir mekanizma olduğu için atlamayı planlıyordum. Şimdiye kadar bulduğumdan bu tek seçenek. – Mark

+0

@Rex Aynı hedefi gerçekleştirmek için bu yöntemi nasıl kullandığımı yazdım. http://fooberry.com/2009/05/25/running-specific-javascript-after-partial-postback/ – Mark

2

This ücretsiz bu kontrolü indirebilirsiniz çok daha zarif, IMO olduğunu. görünüşe göre ASP AJAX pageLoad adında herhangi bir JS işlevini çağırır. bu yüzden pageLoad adında bir işlev yazınız ve kısmi güncellemeden sonra bile her sayfa yükünde çalıştırılacaktır.

1

<script type="text/javascript" language="javascript"> 
    function ValidateUserRole() { 
     var answer = confirm("Are you sure..................") 
     if (answer) { 
      var btnRoleReleatedButton = '<%=btnRoleReleatedButton.ClientID%>'; 
      document.getElementById(btnRoleReleatedButton).click(); 
     } 
     else { 
      return false; 
     } 
    } 
</script> 

Tier 3 :<asp:UpdatePanel ID="upTier3Details" runat="server" UpdateMode="Conditional"> 
    <ContentTemplate> 
     <asp:DropDownList ID="ddlTier3" runat="server" CssClass="ddlextralarge" Width="350" /> 
    </ContentTemplate> 
    <Triggers> 
     <asp:AsyncPostBackTrigger ControlID="ddlUserRole" EventName="SelectedIndexChanged" /> 
    </Triggers> 
</asp:UpdatePanel> 

İlgili konular