2010-09-09 7 views
5

में किसी अन्य पृष्ठ पर रीडायरेक्ट करने के लिए कहा गया है, मैं वेब लोड में .NET 4.0 का उपयोग करके एक्सेल करने के लिए एक ग्रिडव्यू निर्यात कर रहा हूं, पृष्ठ लोड पर और फ़ाइल को उत्पन्न करने की आवश्यकता है और फिर पृष्ठ कॉलिंग पेज पर रीडायरेक्ट किया जाएगा। मैं मुद्दों में चला रहा हूँ क्योंकि मेरे कोड उत्कृष्टता प्राप्त करने इस प्रकार है निर्यात करने के लिए:Response.End() को C#

gvSummary.Style.Add("font-size", ".6em"); 
    Response.Clear(); 
    string attachment = "attachment; filename=filename.xls"; 
    Response.ClearContent(); 
    Response.AddHeader("content-disposition", attachment); 
    Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; 
    StringWriter sw = new StringWriter(); 
    HtmlTextWriter htw = new HtmlTextWriter(sw); 
    gvSummary.GridLines = GridLines.Horizontal; 
    gvSummary.RenderControl(htw); 
    Response.Write(sw.ToString()); 
    Response.End(); 

मुझे पता है कि अगर मैं Response.Redirect() डाल .End() से पहले, मैं पुनः निर्देशित किया जाएगा, लेकिन फाइल है कभी उत्पन्न नहीं हुआ, और अगर मैं Response.Redirect() के बाद।() मुझे फ़ाइल मिलती है लेकिन कोई पुनर्निर्देशन नहीं होता है।

ऊपर लिखा गया कोड फ़ाइल उत्पन्न करने में बस ठीक काम करता है, हालांकि फ़ाइल उत्पन्न होने के बाद भी मैं अपनी लोडिंग एनीमेशन देख रहा हूं क्योंकि मैं पृष्ठ से बाहर नहीं जा सकता। कोई विचार?

उत्तर

8

मैं एक रीडायरेक्ट हेडर जोड़ने का सुझाव देता हूं। कुछ इस तरह:

Response.AddHeader("Refresh", "3; url=index.html"); 

कहाँ 3 देरी और index.html का समय आ गया है यूआरएल आप

+0

अनुरोध के परिणामस्वरूप एक xls फ़ाइल है और HTML नहीं, क्या वह वास्तव में काम करेगा? –

+0

मुझे लगता है हाँ। क्योंकि सभी HTTP का पहला जवाब देने के लिए उपयोग किया जाता है। इस मामले में HTTP पैकेज हेडर के सेट की तरह दिखता है जिसके बाद बाइनरी डेटा (xls फ़ाइल) होता है। कुछ मामलों में adiitionaly को contnt प्रकार को एप्लिकेशन/ऑक्टेट-स्ट्रीम पर सेट करना आवश्यक होगा, लेकिन यह इस बात पर निर्भर करता है कि हमें किस प्रकार के परिणाम की आवश्यकता है – ILya

+0

यह काम नहीं करता है, यह फ़ाइल लोड करेगा लेकिन रीडायरेक्ट नहीं करेगा ... – EvanGWatkins

1

समस्या Response.End है (पर रीडायरेक्ट करना होगा) के लिए पृष्ठ के पिछले बिट्स भेज है अनुरोध पूरा करने के लिए ग्राहक। आपके मामले में, अनुरोध में फ़ाइल है।

एक संभावित समाधान डाउनलोड के लिए एक नया पृष्ठ खोलना और रीडायरेक्ट को वर्तमान पृष्ठ में रखना है।

0

आप दोनों खुला नहीं कर सकते तो आप एक iframe

0

जावास्क्रिप्ट में करने के लिए स्रोत एक नई विंडो में या के रूप में उत्पन्न xls फ़ाइल के लिए लिंक स्थापित करने की कोशिश करना चाहते हो सकता है:

function refresh() { document.location.reload(true); } 

बटन :

<td valign="top" style=" width:100px "> 
<asp:Button runat="server" ID="btnX" Text="X" CssClass="ui-button ui-widget ui-state-default ui-corner-all ui-button-text ui-state-hover" OnClientClick="refresh();" Width="180px" /> 
</td> 
0

मैंने स्क्रिप्ट मैनेजर के माध्यम से एक अलग पृष्ठ खोलने का प्रयास किया जो मेरे मूल पृष्ठ में रीडायरेक्ट करते समय मेरी फ़ाइल डाउनलोड करेगा।

तो मैं अपने मुख्य पृष्ठ में नीचे दिए गए कोड कहा:

string strScript = "<script language='javascript'> window.open('CommonDownload.aspx','Report');</script>"; 
ScriptManager.RegisterStartupScript(Page, this.GetType(), "clientScript", strScript, false); 
Response.Redirect("Page.aspx"); 

और फिर मेरी CommonDownload पेज के Page_Load विधि में डाउनलोड कोड गयी। मैंने सत्र के माध्यम से CommonDownload पृष्ठ में आवश्यक कुछ जानकारी पास की।