سؤال

لدي نموذج يبدأ Response.Redirect لتنزيل ملف بمجرد اكتماله.أريد أيضًا إخفاء النموذج وإظهار لوحة "شكرًا لك" قبل إجراء عملية إعادة التوجيه، ولكن يبدو أن محرك asp.net يقوم فقط بإعادة التوجيه دون القيام بالمهمتين السابقتين في الكود التالي:

if (success)
                {
                    lblSuccessMessage.Text = _successMessage;
                    showMessage(true);                        
                }
                else
                {
                    lblSuccessMessage.Text = _failureMessage;
                    showMessage(false);
                }

                if(success)
                    Response.Redirect(_downloadURL); 

هل لديك أي فكرة عن كيفية إجبار الصفحة على التحديث قبل بدء عملية إعادة التوجيه؟؟

شكرا أكوام جريج

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

المحلول

if (success)
                {
                    lblSuccessMessage.Text = _successMessage;
                    showMessage(true);                        
                }
                else
                {
                    lblSuccessMessage.Text = _failureMessage;
                    showMessage(false);
                }

                if(success) {
                    Threading.Thread.Sleep(200)
                    Response.Redirect(_downloadURL);
                }

ويمكنك إجبارها على الانتظار قبل أن الموجهات بجعل النوم الموضوع.

والخيار الأفضل، ومعظم سهلة الاستعمال هو السماح يستمر المستخدم من تلقاء نفسها عن طريق إضافة زر واحدة. على سبيل المثال، يمكنك أن تفعل ما يلي:

if (success)
                {
                    lblSuccessMessage.Text = _successMessage + "<br /><INPUT TYPE='button' VALUE='Continue...' onClick='parent.location='" + _downloadURL + "'/>";
                    showMessage(true);                        
                }
                else
                {
                    lblSuccessMessage.Text = _failureMessage;
                    showMessage(false);
                }

نصائح أخرى

وتحتاج بعض التعليمات البرمجية العميل للقيام إعادة التوجيه.

وأفضله أن يكون لتضمين بعض جافا سكريبت للقيام إعادة التوجيه.

وهكذا، إخفاء النموذج، عرض رسالة، و (في أغلظ مستوى) استخدام عنصر تحكم حرفية لإضافة بعض النصوص مثل هذا إلى الصفحة.

<script>
    location.href = "http://otherServerName/fileToDownload";
</script>

وأنت قد تجد أن هذا يحدث إعادة توجيه قبل صفحتك تمت زيارتها تغيير لعرضه - في هذه الحالة، وهذه محاولة في العلامة نص HTML (لاحظ أنواع مختلفة من علامات الاقتباس):

<body onload='location.href="http://otherServerName/fileToDownload";'>

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

وأنا شخصيا أفضل أن يكون صفحة منفصلة لكل مرحلة من مراحل العملية، بدلا من محاولة القيام بكل شيء في صفحة واحدة من خلال إظهار / إخفاء مختلف بت - ولكن يمكن أن أكون عفا عليها الزمن

.

وتحرير: إذا كان لديهم جافا سكريبت المعوقين، هل يمكن أن مجرد توفير رابط لتحميل ملف

وأنت غير قادر، لأن هذا العمل يحدث على الخادم قبل إرسالها عودتها إلى العميل. إذا كنت تحاول إرسال ملف إلى المستخدم، يمكنك تيار لهم باستخدام Response.Write (). هذا وسوف تبقي منهم على الصفحة الحالية بحيث يمكن أن تظهر لهم رسالة، وأنها سوف تحصل على تحميل موجه.

والمخزن المؤقت صفيف بايت من ملف

Response.AddHeader("Content-disposition", "attachment; filename=" & myUserFriendlyFileName)
Response.ContentType = "application/octet-stream"
Response.OutputStream.Write(buffer, 0, buffer.Length)

ومباشرة في asp.net كنت غير قادر على القيام بذلك، ولكن الطريق نحو هو إما استخدام JS (كما نشر هنا)، أو يمكنك استخدام IFRAME الذي يقوم بتحميل الملف ليتم تحميلها - سيكون المستخدم رؤية الشكر ، ثم فتح / حفظ الحوار ...

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

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

ربما يكون إرسال رأس إعادة التوجيه يدويًا، مع الانتظار لعدد من الثواني، هو الحل المناسب لك؟

Response.AddHeader("Redirect", "3; URL=" + _downloadURL")

يحرر

بعد قراءة سؤالك مرة أخرى، ربما أخطأت في فهمك قليلاً.

يبدو أنك تريد تأخير العملية برمتها حتى يمكن عرض لوحة "شكرًا لك".وهذا يترك لك احتمالين:

  • إما أن تعتمد على JavaScript لعرض اللوحة وتأخير النموذج POST.يمكن للخادم بعد ذلك إعادة التوجيه على الفور باستخدام Response.Redirect().هذه هي الطريقة الأكثر حداثة للقيام بذلك.
  • أو تريد أن تكون مستقلاً تمامًا عن JavaScript.في هذه الحالة، يجب عليك جعل الخادم يعرض صفحة متوسطة "شكرًا لك، انقر هنا للاستمرار" في نموذج POST، واستخدام طريقة إعادة التوجيه عبر Response.AddHeader() لجعل تلك الصفحة تختفي تلقائيًا.هذا قديم بعض الشيء ولكنه موثوق.

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

وانتهى بي الأمر القيام باقتراح abrudtkuh، مجرد إضافة وصلة إلى الرسالة succeess ... أنا سوف تنفذ أيضا إعادة توجيه جافا سكريبت لبدء التحميل تلقائيا، ولكن لم أكن أريد أن تعتمد فقط على جافا سكريبت، وبالتالي زر يتم عرضها من قبل صفحة.

وشكرا للجميع نصائح - لكم جميعا الصخور

والهتافات جريج

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