2012-07-26 8 views
5

मेरा एप्लिकेशन एमवीसी 3, .NET का उपयोग करके लागू किया गया है। मैं एक बटन के क्लिक पर एक एक्सेल फ़ाइल उत्पन्न करने की कोशिश कर रहा हूं। नियंत्रक कार्रवाई के लिए कॉल अजाक्स का उपयोग करके किया जाता है। मेरी मुख्य समस्या यह है: फ़ाइल पीढ़ी के दौरान मैं स्क्रीन पर एक छवि प्रदर्शित करने की कोशिश कर रहा हूं ताकि उपयोगकर्ता को इंजिनिंग ऑपरेशन के बारे में जानकारी मिल सके। मैं छवि को बहुत अच्छी तरह प्रदर्शित कर सकता हूं लेकिन ऑपरेशन पूरा होने के बाद मैं इसे छुपा नहीं सकता। codei का उपयोग कर रहा है:नियंत्रक कार्रवाई पूर्ण होने के बाद जावास्क्रिप्ट का उपयोग कर छवि छिपाएं MVC3

Javascript कोड:

$("input.DownloadExcelReport").click(function (e) { 
    e.preventDefault(); 
    var parameter = -- code to fetch parameter value; 
    var outputViewUrl = (the url is created here); 
    showLoading(); -- This function displays the image 
    window.location.href = outputViewUrl; 
}); 

नियंत्रक कार्रवाई कोड:

public ActionResult DownExcelReportForAssortment(Guid parameter) 
{ 

     try 
     { 

      //the contents for the file generation are fetched here.. 
      // Write contents to excel file 
      if (memoryStream != null) 
      { 
       var documentName = "Report.xls"; 
       byte[] byteArrary = memoryStream.ToArray(); 
       return File(byteArrary, "application/vnd.ms-excel", documentName); 
      } 
     } 
     catch (Exception ex) 
     { 
      LogManager.LogException(ex); 
     } 
} 

मैं बुला जावास्क्रिप्ट विधि मैं कहाँ करने के लिए कोड लिख सकते हैं करने के लिए एक Json परिणाम नहीं लौटते छवि छुपाएं। मैं एक फाइल लौटा रहा हूं जिसे उपयोगकर्ता द्वारा सहेजा जा सकता है और कार्रवाई पूरी हो गई है।

क्या कोई कृपया कृपया मुझे मदद कर सकता है/फाइल जनरेशन ऑपरेशन पूरा होने के बाद मैं छवि को कैसे छुपा सकता हूं?

मदद की सराहना ...

उत्तर

9

आप following article चेकआउट और कार्रवाई में डाल सकता है। तो हम एक नियंत्रक को परिभाषित करने से शुरू:

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     return View(); 
    } 

    public ActionResult DownExcelReportForAssortment(Guid parameter, string tokenId) 
    { 
     // Simulate some heavy work to fetch the report 
     Thread.Sleep(5000); 

     // we fake it 
     byte[] byteArray = System.IO.File.ReadAllBytes(@"c:\test.xls"); 

     var cookie = new HttpCookie("fileDownloadToken", tokenId); 
     Response.AppendCookie(cookie); 

     return File(byteArray, "application/vnd.ms-excel", "report.xls"); 
    } 
} 

और ध्यान में रखते हुए:

@Html.ActionLink(
    "download report", 
    "DownExcelReportForAssortment", 
    "Home", 
    new { parameter = Guid.NewGuid(), tokenId = "__token__" }, 
    new { @class = "download" } 
) 

अब अंतिम चरण है jquery.cookie प्लगइन शामिल करने के लिए:

<script type="text/javascript" src="@Url.Content("~/scripts/jquery.cookie.js")"></script> 

और करने के लिए एक पटकथा लिखने एंकर की क्लिक घटना की सदस्यता लें और डाउनलोड प्रगति को ट्रैक करें:

$(function() { 
    var fileDownloadCheckTimer; 

    $('.download').click(function() { 
     var token = new Date().getTime(); 
     $(this).attr('href', function() { 
      return this.href.replace('__token__', token); 
     }); 

     // Show the download spinner 
     $('body').append('<span id="progress">Downloading ...</span>'); 

     // Start polling for the cookie 
     fileDownloadCheckTimer = window.setInterval(function() { 
      var cookieValue = $.cookie('fileDownloadToken'); 
      if (cookieValue == token) { 
       window.clearInterval(fileDownloadCheckTimer); 
       $.cookie('fileDownloadToken', null); 

       // Hide the download spinner 
       $('#progress').remove(); 
      } 
     }, 1000); 
    }); 
}); 
+0

कुकी मुद्दों से बचने के लिए, मैं इसे एक सत्र चर का उपयोग करके संभालना पसंद करता हूं। तो आप अपनी क्रिया में लंबे समय तक चलने वाले कोड के बाद सत्र वैरिएबल सेट करते हैं और आप अपने जेएस में एक समान मतदान स्क्रिप्ट का उपयोग करते हैं जो AJAX अनुरोधों को दूसरी क्रिया में भेजता है जो यह देखने के लिए जांचता है कि सत्र मौजूद है या नहीं। यदि ऐसा होता है, तो आप सत्र को मार देते हैं और जेएस कॉलबैक के लिए 'सत्य' प्रतिक्रिया वापस कर देते हैं और अपना लोडर बंद कर देते हैं। –

संबंधित मुद्दे