كيفية التحقق مما إذا كانت الصفحة قد تم إعادة نشرها ضمن صفحة الوظيفة المحجوزة، قم بتحميلها على ASP.NET AJAX

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

سؤال

أنا أبحث عن وسيلة للتحقق من الداخل pageLoad() إذا تم رفع هذه الطريقة أثناء حدث التحميل بسبب إعادة النشر/غير المتزامن أو بسبب التحميل والوصول في المرة الأولى.

هذا مشابه ل Page.IsPostback الخاصية داخل الكود خلف الصفحة.

تيا ، ريكي

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

المحلول

إحدى الطرق التي يمكنك من خلالها القيام بذلك هي توصيل معالج Application.Load في Application.Init، ثم جعل هذا المعالج يفك ربط نفسه بعد التشغيل:

Sys.Application.add_init(AppInit);

function AppInit() {
  Sys.Application.add_load(RunOnce);
}

function RunOnce() {
  // This will only happen once per GET request to the page.

  Sys.Application.remove_load(RunOnce);
}

سيتم تنفيذ ذلك بعد Application.Init.يجب أن يكون آخر شيء قبل استدعاء pageLoad.

نصائح أخرى

@ دارين:شكرا على الاجابة.لقد حاولت إنشاء pageLoad باستخدام وسيطة الحدث ApplicationLoadEventArgs كمعلمة (انظر أدناه).ومع ذلك وفقا ل هذا:

يتم رفع حدث التحميل لجميع عمليات إعادة النشر إلى الخادم، والتي تتضمن عمليات إعادة النشر غير المتزامنة.

كما أشرت، لا تغطي الخاصية isPartialLoad جميع سيناريوهات إعادة النشر.سيكون من الرائع أن تحتوي وسيطة الحدث أيضًا على خاصية isPostback.

   function pageLoad(sender, arg) {
      if (!arg.get_isPartialLoad()) {
          //code to be executed only on the first load
      }
   }

@mmattax:أنا أبحث عن خاصية يمكن استدعاؤها من جانب العميل (جافا سكريبت).

ما يمكنك فعله هو توصيل حدث التحميل الخاص بـ سيس.التطبيق فصل.يمكنك بعد ذلك استخدام خاصية isPartialLoad الخاصة بـ Sys.ApplicationLoadEventArgs فصل.أعتقد أن هذا سيسمح لك بمعرفة ما إذا كنت في إعادة نشر غير متزامنة أم لا.

لمعرفة ما إذا كنت في منشور مرة أخرى، سيتعين عليك التعامل مع ذلك في رمز جانب الخادم وإرساله إلى العميل.

يمكن أن يكون لديك إدخال مخفي قمت بتعيينه على قيمة معروفة من جانب الخادم إذا كان إعادة نشر/رد اتصال - ويمكن لجافا سكريبت الخاص بك التحقق من هذه القيمة.

ومع ذلك، آمل حقًا أن يكون هناك حل خاص بالعميل فقط لهذا الغرض.

يحرر: @ mmattax - أعتقد أنه يبحث عن حل من جانب العميل - وهو ما يعادل JavaScript لذلك.

لا يزال بإمكانك استخدام Page.IsPostback أثناء مكالمة غير متزامنة.

Application.Init من المحتمل أن يكون حدثًا أكثر ملاءمة للاستخدام، إذا كنت تريد تنفيذ التعليمات البرمجية عند التحميل الأول فقط.

@ ديف وارد:هذا من شأنه أن يعمل عادة.ومع ذلك، فإن التعليمات البرمجية هي إرفاق الحدث على كائن السلوك.نظرًا لأن إنشاء كائن السلوك يحدث أثناء Application.Init، فإن إرفاق هذا الحدث سيؤدي إلى سلوك غير متوقع.

سيكون من الرائع أن يكون هناك حدث PostInit.

@ ديف وارد:استخدام طريقة RunOnce يعمل بشكل مثالي.يؤدي هذا إلى حل مشكلتي دون الحاجة إلى الحل البديل للتحقق أولاً مما إذا كان المعالج موجودًا بالفعل قبل إرفاقه بحدث ما.

سأضع علامة على إجابتك كإجابة مقبولة.شكرًا لك مرة أخرى.

هذا هو Ajax المعادل لـ isPostback الذي كنا نستخدمه لفترة من الوقت.

public static bool isAjaxRequest(System.Web.HttpRequest request)
    {//Checks to see if the request is an Ajax request
        if (request.ServerVariables["HTTP_X_MICROSOFTAJAX"] != null ||
            request.Form["__CALLBACKID"] != null)
            return true;
        else
            return false;
    }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top