كيفية التوقف عن UpdatePanel من التسبب في إعادة النشر صفحة كاملة؟

StackOverflow https://stackoverflow.com/questions/728043

سؤال

أنا أستخدم .NET 3.5 وبناء صفحات داخل إطار Server Community Server 2008.

على إحدى الصفحات، أحاول الحصول على عمل UpdatePanel.

أخذت عينة مباشرة من موقع ASP.NET، قم بتحديث وقت في UpdatePanel إلى الوقت الحالي بالنقر فوق زر ولكن لسبب ما عندما أحاول وأداء وظيفة تحديث الصفحة بأكملها.

هنا ما لدي:

protected void Button1_Click(object sender, EventArgs e)
{
    Label1.Text = "Panel refreshed at " + DateTime.Now.ToString();
    Label2.Text = "Panel refreshed at " + DateTime.Now.ToString();
}
<asp:ScriptManager ID="ScriptManager1" runat="server"/>

<asp:UpdatePanel ID="UpdatePanel1" runat="server">
    <ContentTemplate>
        <fieldset>
            <legend>UpdatePanel</legend>
            <asp:Label ID="Label1" runat="server" Text="Panel created."></asp:Label><br />
            <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
        </fieldset>
    </ContentTemplate>
</asp:UpdatePanel>

كلما قمت بالنقر فوق الزر، تأكد من تحديثات لوحة - لكن الصفحة بأكملها تنشر مرة أخرى! أستطيع أن أرى الصفحة بأكملها وامض. ما هيك أفعل الخطأ؟

أنا داخل masterpage متداخلة، لكنني لست متأكدا مما إذا كانت هذه مشكلة. هل يمكن أن يكون هناك شيء في إطار خادم المجتمع هذا الذي أستخدمه يسبب جميع الأحداث لإعادة النشر؟

هل كانت مفيدة؟

المحلول

هل حاولت الإعداد Button1 كما AsyncPostBackTrigger في قسم المشغلات؟ تعيين ChildrenAsTriggers الممتلكات إلى true و ال UpdateMode الممتلكات إلى Conditional.

protected void Button1_Click(object sender, EventArgs e)
{    
    Label1.Text = "Panel refreshed at " + DateTime.Now.ToString();    
    UpdatePanel1.Update();
}    
<asp:ScriptManager ID="ScriptManager1" runat="server"/>
<asp:UpdatePanel ID="UpdatePanel1" runat="server" ChildrenAsTriggers="true" UpdateMode="Conditional">
    <Triggers>        
        <asp:AsyncPostBackTrigger ControlID="Button1" EventName="Click" />    
    </Triggers>    
    <ContentTemplate>        
        <fieldset>            
            <legend>UpdatePanel</legend>            
            <asp:Label ID="Label1" runat="server" Text="Panel created."></asp:Label><br />            
            <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />        
        </fieldset>    
    </ContentTemplate>
</asp:UpdatePanel>

نصائح أخرى

أنا لا أرى Label2 في نموذج التعليمات البرمجية أعلاه. إذا كان ALAME2 موجود خارج UpdatePanel، فستحدث تحديث الصفحة الكاملة لأن هذا هو ما هو مطلوب للصفحة لتحديث Label2 بشكل صحيح.

بشكل افتراضي، سيتم تحديث UpdatePanels فقط ديناميكيا المحتوى داخلها، عند النزوع عن طريق التحكم داخلها. إذا كنت بحاجة إلى القيام ببعض التحديثات الفردية، فقل زر خارج لوحة مما يؤدي إلى تحديث التحديث أو التسمية في لوحة مختلفة، ثم تحتاج إلى تعيين السمة الشرطية على UpdatePanel (S) الخاص بك وإجراء مكالمات التحديث اليدوي في التعليمات البرمجية الخاصة بك.

سبب آخر محتمل هو أنه إذا كانت الصفحة ClientIDMode="static", ثم يتحكم في أنك تتوقع تحديث ما updatepanel فقط ستحديث الصفحة بأكملها.

لإصلاح المشكلة، تحتاج فقط إلى تعيين ClientIDMode="AutoID" على الرقابة (المراقبة) التي يجب أن تؤدي إلى إعادة تشغيل UpdatePanel مرة أخرى.

تعيين ChildrenAsTriggers="true" على عنصر تحكم upderpanel الخاص بك.

"بشكل افتراضي، سيتم تحديث UpdatePanels فقط المحتوى داخلها فقط، عند النزوع عن طريق التحكم داخلها."

وإلا سيتم تحديث الصفحة بأكملها! هذا هو بيت القصيد!

إذا كان لديك مشروع قديم تمت ترقيته من .NET Framework V1.1، فقم بإزالة هذا الخط من تكوين الويب الخاص بك لجعله يعمل:

<xhtmlConformance mode="Legacy"/>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top