أسب.نت أجاكس:إطلاق UpdatePanel بعد اكتمال تحميل الصفحة

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

سؤال

أنا متأكد من أن هذا سهل ولكن لا يمكنني معرفة ذلك:

لدي صفحة ASP.NET بها بعض UpdatePanels.أريد الصفحة أن بالكامل قم بتحميل بعض النصوص "الرجاء الانتظار" في UpdatePanels.ثم بمجرد أن تكون الصفحة محملة بالكامل أريد استدعاء وظيفة التعليمات البرمجية الخلفية لتحديث UpdatePanel.

هل هناك أي أفكار حول مجموعة جافا سكريبت والكود الخلفي التي أحتاجها لتنفيذ هذه الفكرة؟

ش.م.ل

ملاحظة:لقد حاولت وضع استدعاء وظيفتي في Page_Load ولكن بعد ذلك يتم تشغيل الكود قبل يتم تسليم الصفحة، وبما أن الوظيفة التي أريد تشغيلها تستغرق بعض الوقت، فإن تحميل الصفحة يستغرق وقتًا طويلاً.

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

المحلول

استخدم عنصر تحكم المؤقت الذي سيتم تشغيله بعد عدد معين من المللي ثانية (لتحميل الصفحة).في حدث علامة المؤقت، قم بتحديث لوحة التحديث.

نصائح أخرى

لقد عبثت باقتراحات ScriptManager - التي أعتقد أنني كنت سأعمل عليها في النهاية ولكن يبدو لي أن فكرة Timer أسهل في التنفيذ وليست في الواقع (!) بهذا القدر من الاختراق؟!

إليك كيفية تحديث اللوحة الخاصة بي بعد اكتمل عرض الصفحة الأولي...

default.aspx

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="AJAXPostLoadCall._Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <h2>And now for a magic trick...</h2>
    <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="True">
        </asp:ScriptManager>
        <div>
            <asp:UpdatePanel ID="UpdatePanel1" runat="server">
                <ContentTemplate>
                    <asp:Timer ID="Timer1" runat="server" Interval="2000" ontick="Timer1_Tick" />
                    <asp:Label ID="Label1" runat="server">Something magic is about to happen...</asp:Label>
                </ContentTemplate>
            </asp:UpdatePanel>

        </div>
    </form>
</body>
</html>

ويقرأ الكود الموجود خلف default.aspx.cs

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

namespace AJAXPostLoadCall
{
    public partial class _Default : System.Web.UI.Page
    {

        protected void Page_Load(object sender, EventArgs e)
        {
        }

        public void DoMagic()
        {
            Label1.Text = "Abracadabra";
        }

        protected void Timer1_Tick(object sender, EventArgs e)
        {
            // Do the magic, then disable the timer
            DoMagic();
            Timer1.Enabled = false;
        }

    }
}

لذلك، يتم تحميل الصفحة ويتم تشغيل المؤقت (الموجود في UpdatePanel) بعد ثانيتين من تحميل الصفحة (أعتقد - لست متأكدًا من متى يبدأ المؤقت بالفعل؟).تتم إعادة كتابة نص التسمية ثم يتم تعطيل المؤقت لإيقاف أي تحديثات أخرى.

بسيط بما فيه الكفاية - ولكن هل يمكنكم أن تخبروني ما إذا كان هذا اختراقًا فظيعًا؟

القي نظرة على ScriptManager.RegisterStartupScript

الفكرة هي أن تقوم بتسجيل برنامج نصي ليتم تشغيله عند بدء التشغيل (أعتقد أنه بمجرد تحميل الصفحة).يجب أن يستدعي البرنامج النصي الخاص بك وظيفة تؤدي إلى إعادة النشر من خلال UpdatePanel الخاص بك

إن القيام بأشياء مثل هذه باستخدام UpdatePanels بدلاً من القيام بشيء يسهل فهمه سوف يضرك، إنها مجرد مسألة وقت.

من السؤال الأول في هذا المنشور، أعتقد أن ما يبحث عنه المستخدم هو رسالة يتم عرضها للمستخدم أثناء تحميل لوحة التحديث.ما عليك سوى وضع عنصر تحكم UpdateProgress مثل الموجود أدناه على صفحتك أعلى عنصر تحكم UpdatePanel مباشرةً، ولا تتردد في تشغيل حدث في UpdatePanel، ووضع رمز الواجهة الخلفية كالمعتاد، وسيتم تحميل كل ما هو موجود داخل عنصر تحكم UpdateProgress أثناء تشغيل UpdatePanel الخاص بك تتم معالجة المحتوى في الخلفية.

<asp:UpdateProgress AssociatedUpdatePanelID="UpdatePanel1" ID="UpdateProgress1" runat="server">
  <ProgressTemplate>
    <div class="mystyleclass">
      Please Wait...
    </div>
  </ProgressTemplate>
</asp:UpdateProgress>

ليست هناك حاجة لأية أشياء جافا سكريبت يدوية فوضوية.

يسمح ScriptManager.RegisterStartupScript بتشغيل البرنامج النصي عند بدء التشغيل داخل لوحة التحديث.إذا كنت تستخدم ClientScript.RegisterStartupScript القديم، فسيكون البرنامج النصي الذي تعرضه خارج حدود لوحة udpate، وبالتالي لن يتم تنفيذه أثناء تحميل الصفحة غير المتزامنة.

باستخدام أسلوب توم مع البرنامج النصي لبدء التشغيل، يمكنك بعد ذلك الاتصال بـ:

__doPostBack('UpdatePanelName', '');

ممتاز وشكرًا لـ SAL وبقية اللاعبين.أدى هذا إلى حل مشكلة كبيرة واجهتني، حيث كان الإجراء يستغرق ما يصل إلى دقيقة حتى يتم عرض الصفحة وعرضها أخيرًا.

شكرًا!

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top