2010-08-18 11 views
5

başından sonra veya yakınına işlenen javascript kodundan ASP.NET (3.5) javascript geri bildirim işlevini __doPostBack el ile çağırmaya çalışıyorum. Sorun, normal olarak <form> etiketinin (ve gizli alanların) başlangıcından sonra oluşturulmuş olan geri gönderme komut dosyası bloğunun, bazen </form> etiketinin kapanmasıyla oluşturulmasından kaynaklanmaktadır.ASP.NET __doPostBack form etiketi

Form etiketinin başına yakın olarak oluşturulmasını zorlamanın bir yolu var mı? Ayrıca, ASP.NET, geri gönderme istemci komut dosyası bloğunun ne zaman/nerede oluşturulacağına nasıl karar verir?

Düzen> Ek Bilgiler: javascript kodu __doPostBack işlev başvuran bir kullanıcı denetimi içinde bulunur. Denetimin kendisi, bu işlevi çağıran herhangi bir 'geri bildirim' içermiyor. (I 'geri gönderme kontrolleri' denince ben __doPostBack fonksiyonu ve Yok ASP.NET ImageButton ve Button denetimleri çağrı ASP.net denetimleri ortalama) Ben gözlenen ettiğimiz bilgilere ve bağımlılık üzerine Brian'ın yorumun @ Tabanlı

sayfadaki 'geri gönderme denetimleri' kullanılabilirliği hakkında geri gönderme komut dosyası, sayfada geri gönderime neden olan denetimler bulunduğunda, __doPostBack komut dosyası bloğunun <form> açılmasından sonra oluşturulduğunu ve hiçbiri olmadığında, bunların yakınlaştırdığını buldum </form> etiketinin kapanması (veya this'a göre işlenmesi bile gerekmemektedir). Şimdi, ASP.NET'in, onu gerektiren bir denetim yoksa, geri gönderme komut dosyası oluşturmaması mantıklı olacaktır, ancak kapanış etiketinin yakınındaki komut dosyasının görünen konumu, hala beni utandırıyor. Bu davranışı öneren hiçbir belge bulamadım. Tüm bulabildiğim this idi.

bu soruna bir kaç yol buldum, söyledikten:

  1. bir 'geri gönderme denetimi' ekleyin ve css aracılığıyla gizli (değil Görünür özellik) görünürlüğünü ayarlayın. Örneğin. <asp:LinkButton ID="RequirePostBackScriptLink" runat="server" style="display:none;" /> (kullanıyorum)
  2. Kontrolü Page.RegisterRequiresPostBack'a ekleyin ve IPostBackDataHandler arabirimini uygulayın. @Jonathan_Bates görevinden belirtildiği gibi

Son olarak, yapılacak doğru şey load (veya ready Eğer Jquery kullanıyorsanız) için bir olay işleyicisi olan bir işlev içinde __doPostBack başvurusunu akıtmaktır. Bu şekilde, __doPostBack komut dosyasının gerçek yerleşimine bağlı olmaya gerek yoktur.

Bu konuda, daha önce bahsettiğim, davranış hakkında daha fazla bilgi sağlayabilmesi harika olurdu. sayfa önceden tanımlanmış bir noktada istemci komut dosyası blokları ve başlatma komut dosyalarını enjekte oysa

cevap

0

Bazıları

Bunun bir kontrol ya da bir şey için olduğunu varsayalım ..., işlemek kontrolleri ile kontrol edilir? Bu standart bir blok için değil mi?

+0

Evet, temel olarak varsayılan __doPostBack işlevini "kaçırdığı" ve daha sonra geri gönderimi bir geri çağırma yoluyla çağıran bir komut dosyası içeren bir denetim için budur. Ama haklısınız, bir şekilde 'geri gönderim denetimleri' olup olmadığına (ImageButton ve asp.net Düğme denetimleri hariç, bir düzenli gönderiyi kullanıp aynı sayfaya geri gönderildiklerinden) bağlı. Gözlemlediğim şudur: Sayfada herhangi bir 'geri gönderme denetimi' yoksa, komut dosyası bloğu kapanış form etiketinin yanında (veya okuduğumdan, oluşturulmadığından) oluşturulur. Bu gözlemi doğrulamak için belgelere bakıyorum. –

2

Bence, betimlemenin sizin için önemli olduğu, böylece betikleriniz bundan sonra işleyebileceği ve onu başlatabileceğine inanıyorum (ki bu da ön söyleyeyim, başlamak için kötü bir fikirdir).

__doPostBack numaralı telefonu aramak için kullandığınız komut dosyasının, tarayıcıya okunduktan sonra çağırdığından emin olmanız yeterlidir.JQuery ve $(document).ready() kuralı gibi bir kitaplık kullanırsanız, kodunuzun diğer tüm kodlar yüklenene kadar çalıştırılmayacağından ve kodunuzun __doPostBack'u arayabileceğinden emin olabilirsiniz.

+0

JQuery hazır olayı ile önerdiğiniz gibi bir işleyici işlev kapsamındaki geri bildirim işlevine yapılan başvuruyu almak kesinlikle doğru bir yol olacaktır, ancak varsayılan __doPostBack kod bloğunu oluşturmanın arkasındaki ASP.NET mantığını anlamaya çalışıyorum . –