ASP.Net WebForms ilginç bir konuya rastladınız mı.Dinamik UpdatePanels ve UserControls sorunu
söz konusu site son derece dinamiktir - sayfa CMS moda yapılandırmasına göre inşa edilmiştir.
Ancak 4,5 yılında bir sorunumuz var - Daha fazla içerik bir düğme tıklaması sayesinde sayfaya eklendiğinde, içerik değil tüm biçimlendirme görünür. (Sorunun test edilmesi sırasında .net 4.0'da da üretilir). Burada göstermek içinsadece (bu durumda VB) varsayılan WebForms proje şablonu kullanan bir çok dışarı soyulmuş örnektir.
default.aspx olarakşu işaretlemeyi ekleyin: Default.aspx.vb yılında
<asp:UpdatePanel ID="udpTrigger" runat="server" UpdateMode="Always">
<ContentTemplate>
<asp:button id="btnGo" runat="server" Text ="Go" />
</ContentTemplate>
</asp:UpdatePanel>
<asp:Panel ID="pnlContainer" runat="server">
</asp:Panel>
aşağıdaki kodu ekleyin:
Dim _udp As UpdatePanel
Private Sub Page_Init(sender As Object, e As EventArgs) Handles Me.Init
_udp = New UpdatePanel()
_udp.ID = "udpTarget"
_udp.UpdateMode = UpdatePanelUpdateMode.Conditional
pnlContainer.Controls.Add(_udp)
End Sub
Private Sub btnGo_Click(sender As Object, e As EventArgs) Handles btnGo.Click
Dim ctrl = LoadControl("Control.ascx")
Dim pnlWrapper = New Panel With {.ID = "pnlWrapper"}
pnlWrapper.Controls.Add(ctrl)
_udp.ContentTemplateContainer.Controls.Add(pnlWrapper)
_udp.Update()
End Sub
Not: Bir sarma paneli burada bulunmaktadır kullanıcı denetimi ve güncelleme paneli arasında. Bu, çıktıda hangi işaretlemenin eksik olduğunu gösterir.
birControl.ascx
oluşturun ve aşağıdakileri ekleyin:
<asp:Panel ID="pnlControl" runat="server"></asp:Panel>
biz btnGo
kontrolünü tıkladığınızda, sarıcı paneli ve Control.ascx sayfasına eklenmelidir. Sorun kokan
<div id="MainContent_pnlContainer">
<div id="MainContent_udpTarget">
<div id="MainContent_ctl02_pnlControl">
</div>
</div>
</div>
: - sadece kullanıcı kontrolü
<div id="pnlContainer">
<div id="udpTarget">
<div id="pnlWrapper">
<div id="ctl05_pnlControl">
</div>
</div>
</div>
</div>
.Net 4.5, sargı paneli görünmüyor: olur tam olarak ne .Net 3.5'de
t güncelleme paneli web sayfasının işaretlemesinde ise, ancak bu durumda mümkün değildir oluşur. aşırı LoadControl
Anahtarlama (- bu ayrı bir sorun olduğu görülmektedir LoadControl(type,params)
için sargı panelini üreten, ama hiçbir biçimlendirme) kullanılır. Fiddler2 yanıt gövdesini kontrol edilmesi
sarıcı paneli sunucu tarafında ihmal edildiğini gösterir (yani biz istemci tarafı ajax işleme kaybetme değiliz)
Yani herhangi bir geçici çözüm veya hatta çeşit var Bu davranış için düzeltme düzeltme eki - 3.5'de iyi olduğu göz önüne alındığında .Net 4'te bir kırılma gibi görünüyor.
da şimdi bir düzeltme veya geçici çözümü elde etmek için yapmak girişimlerini toplamak için benim blog here bu ilan mı. @ Jadarnel27 Aşağıdaki adımlar VS2010 sorunu yeniden etmediğini bir pointer ardından
Güncelleme
, ben işten uzak makinelerin bir çift adımları denedim.
- İlk önce başka bir VS2013 makinesinde: Sorunu yeniden oluşturdunuz.
- Sonraki, eski dev makinesi, Web için VS2012 Express çalıştıran: sorun VS2013 ile sınırlıdır gibi
Yani bu aşamada bakar sorunu yeniden vermedi. VS2013'te birkaç farklı ayarı denemek için.
Şimdi bunu Microsoft Connect here adresine gönderdiniz.
Kontrol ağacını (sayfadan denetime bakarak, Denetimler özelliklerini kullanarak) incelemek, ağaçtaki panel midir yoksa orada değil mi? Sorun, sunucu tarafında mı yoksa ajax betiklerinde mi farkedilir. Bunu pre-render olayında kontrol etmelisiniz. – JotaBe
@JotaBe: Geri gönderilen işaret sarmalayıcıyı içermez - kemancıda kontrol edilir, yanıt içeriğine bakar. –
@ jadarnel27. İlginç. Burada tüm makinelerde var. Ev kurulumumu test edecek. –