Pertanyaan Cara Menampilkan / Menyembunyikan Panel sebelum menjalankan Response.Redirect


Saya memiliki formulir yang membuka Response.Redirect untuk mengunduh file setelah selesai. Saya juga ingin menyembunyikan formulir dan menunjukkan panel 'terima kasih' sebelum pengalihan berlangsung, namun tampaknya mesin asp.net hanya melakukan pengalihan tanpa melakukan 2 tugas sebelumnya dalam kode berikut:

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

                if(success)
                    Response.Redirect(_downloadURL); 

Tahu bagaimana saya dapat memaksa halaman untuk memperbarui sebelum Redirect menendang ??

Terima kasih banyak Greg


4
2017-10-16 11:53


asal


Jawaban:


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

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

Anda dapat memaksanya menunggu sebelum dialihkan dengan membuat ulir tidur.

Pilihan terbaik dan paling ramah pengguna adalah membiarkan pengguna melanjutkan sendiri dengan menambahkan tombol. Misalnya, Anda dapat melakukan hal berikut:

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

-1
2017-10-16 17:20



Anda perlu beberapa kode sisi klien untuk melakukan pengalihan.

Preferensi saya adalah menyematkan beberapa javascript untuk melakukan redirect.

Jadi, sembunyikan formulir, tampilkan pesan, dan (pada tingkat yang paling kasar) gunakan kontrol literal untuk menambahkan beberapa teks seperti ini ke halaman.

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

Anda mungkin menemukan bahwa pengalihan ini terjadi sebelum halaman Anda memiliki perubahan untuk ditampilkan - dalam hal ini, coba ini di tag badan HTML Anda (perhatikan berbagai jenis tanda kutip):

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

Ingat bahwa setiap posting kembali sebenarnya melayani halaman baru ke klien, tidak hanya mengubah beberapa properti pada halaman saat ini (bahkan jika ASP.NET berusaha keras untuk berpura-pura bahwa itu seperti bentuk windows)

Secara pribadi saya lebih suka memiliki halaman terpisah untuk setiap tahapan proses, daripada mencoba melakukan semuanya dalam satu halaman dengan menunjukkan / menyembunyikan berbagai bit - tetapi saya bisa ketinggalan zaman.

EDIT: jika mereka telah menonaktifkan javascript, Anda hanya dapat memberikan tautan untuk mengunduh file.


2
2017-10-16 12:36



Anda tidak bisa, karena tindakan ini terjadi di server sebelum dikirim kembali ke klien. Jika Anda mencoba mengirim file ke pengguna, Anda dapat melakukan streaming ke mereka menggunakan Response.Write (). Ini akan menjaga mereka di halaman saat ini sehingga Anda dapat menunjukkan kepada mereka pesan dan mereka akan mendapatkan perintah unduhan.

buffer adalah array byte dari suatu file

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

1
2017-10-16 11:58



Langsung di asp.net Anda tidak bisa melakukan ini, tetapi cara untuk menggunakan JS (seperti yang diposting di sini), atau Anda dapat menggunakan IFrame yang memuat file yang akan diunduh - pengguna akan melihat terima kasih, maka Buka / simpan dialog ...


1
2017-10-16 12:43



Sembunyikan klien-sisi dengan javascript dan kemudian lakukan redirect, atau lakukan dua postback: postback pertama untuk menyembunyikan formulir dan menunjukkan ucapan terima kasih, dan yang kedua untuk melakukan redirect setelah ucapan terima kasih telah diberikan ke layar.

Atau, Anda dapat melakukan javascript window.open alih-alih pengalihan yang mengarah ke tujuan setelah postback dan penyembunyian formulir selesai.


1
2017-10-16 12:50



Mungkin mengirim Redirect Header secara manual, dengan beberapa detik untuk menunggu adalah cara yang tepat untuk Anda?

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

EDIT

Setelah membaca pertanyaan Anda lagi, saya mungkin telah salah memahami Anda sedikit.

Anda sepertinya ingin menunda seluruh proses sehingga panel "Terima Kasih" dapat ditampilkan. Itu memberi Anda dua kemungkinan:

  • Entah Anda mengandalkan JavaScript untuk menampilkan panel dan menunda formulir POST. Server kemudian dapat langsung redirect dengan Response.Redirect(). Ini adalah cara yang lebih modern untuk melakukannya.
  • Atau Anda ingin sepenuhnya independen dari JavaScript. Dalam hal ini Anda harus membuat server menampilkan halaman "Terima Kasih, klik di sini untuk melanjutkan" di tengah pada formulir POST, dan menggunakan metode header Redirect melalui Response.AddHeader() untuk membuat halaman itu hilang secara otomatis. Ini agak kuno tapi dapat diandalkan.

Anda tidak dapat benar-benar memiliki kombinasi keduanya, karena itu tidak konsisten bagi pengguna yang menonaktifkan JavaScript.


1
2017-10-16 11:57



Saya akhirnya melakukan saran oleh abrudtkuh, hanya menambahkan tautan ke pesan sukses ... saya juga akan mengimplementasikan pengalihan javascript untuk memulai unduhan secara otomatis, tetapi saya tidak ingin hanya mengandalkan javascript, maka tombol yang ditampilkan oleh halaman.

Terima kasih untuk semua orang - Anda semua rock!

tepuk tangan greg


0
2017-10-17 02:16