سؤال

ما أحاول القيام به هو تقديم عرض في موقع MVC لإبلاغ المستخدم بعدم تحديث متصفحه أثناء إجراء معالجة جانب الخادم. قد تكون هذه مهمة طويلة المدى ، وإذا ضربوا تحديثها ، فسوف يرسل الطلب مرة أخرى ، وبالتالي إرساله إلى شاشة الخطأ عندما كانت العملية ناجحة بالفعل. كنت سأفعل ذلك في JS ، إما مع jQuery $ .ajax (...) أو باستخدام $ (مستند). READY (function () {window.location = ...}) ؛ لكنني كنت آمل أن تكون هناك طريقة للقيام بذلك في MVC ، مما يمنحني مزيدًا من السيطرة على رمز HTTPRESSONCECODE الذي يتم إرجاعه إلى اتصال العميل. هل هناك طريقة للقيام بذلك؟

كنت أفكر على غرار

    public ActionResult LoadingAsync(string UserKey, string userInf)
    {
        AsyncManager.OutstandingOperations.Increment();

        CallProcess(...)

        return View();
    }

ثم يكون لديك إجراء مكتمل قم بإجراء إعادة التوجيه

   public ActionResult LoadingCompleted()
    {
        LongRunningProcess();
        return Redirect("http://yourdone.com");
    }

أو مجرد الحصول على شيء يصنع داخل المنظر الذي سيؤدي إعادة التوجيه من داخل المنظر

    <% Html.RenderAction("Process"); %><!--This won't actually redirect-->

أيه أفكار؟

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

المحلول

لا توجد وسيلة لتحقيق ذلك دون استدعاء نوع من JavaScript على العميل.

عند إرجاع استجابة إلى المستخدم ، إما إرجاع صفحة لعرضها برمز HTTP 200 (OK) ، أو تعليمات لإعادة التوجيه باستخدام رمز HTTP 301 (تم نقله بشكل دائم) أو 307 (تم نقله مؤقتًا) وعنوان URL لإعادة التوجيه إلى.

يجب عليك اختيار أي من قيم الإرجاع هذه ولا يمكنك العودة.

أبسط الحلول هو استخدام JavaScript لإعادة توجيه المستخدم من صفحة "الرجاء الانتظار" إلى الوجهة بمجرد أن تحدد عملية الخلفية قد اكتملت.

نصائح أخرى

يتمثل أحد الحلول البسيطة في إطلاق عملية الخلفية الخاصة بك ، ثم عرض صفحة تطلب من المستخدم عدم تحديثه ، (2) استطلاعات الخادم كل ثانيتين عبر JavaScript لتحديد ما إذا كانت عملية الخلفية كاملة ، ( 3) إعادة التوجيه عند تحديد أنها كاملة.

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