1

Am dowloading a file using JQUERY MVC. User clicks on button and am downloading the File looks as simple as it is.

My Jquery Event

$(document).on("click", "#download", function () {
    $.blockUI();
    window.location = "../Home/Download";
    $.unblockUI();
    }

and which calls my server side

public ActionResult Download()
    {
    return File();
    }

Everything is fine Except that am using Block UI(Jquery Plugin) to keep the user know that Download is in progress..."Please wait"

and once the Download is complete i need to unblock UI and let the user Save/open file. how can i modify the above code to achieve this or any other idea ??

Currently my c# code is called and the next line in jquery is executed and block ui is Gone next sec. how can i make the process wait until the download completed ?

0

3 Answers 3

1

You don't need to window.location. You can simply create an iframe using jQuery and set its url to your action. To unblock UI .load method can be used. You also need to create a hidden container in your html that will contain the iframe so that it remains hidden.

<div id="DivIframeContainer" style="display:none;" />

$(document).on("click", "#download", function () {
    $.blockUI();       
var iframe = $("<iframe/>").load(function () {
     $.unblockUI();
}).attr({
    src: "../Home/Download"
}).appendTo($("#DivIframeContainer"));
    }
Sign up to request clarification or add additional context in comments.

12 Comments

Not working in IE8 is the Problem !! Any work arounds ?
Nope !! just the Block UI Freezed !! guess unblock ui is not called
Nope...nothing came up after Block UI...!!! so how s the flow works...any links?? is load similar to ready ?
Here you can find about load. but you need to debug what is not working properly.
No, your code is fine. Because when I remove the src attribute the UnblockUI run successful. I think is the return in the controller. My actionresult is fine and has not contain errors but looks like the "return File(ms, @"application/vnd.openxm......" dont like to your code. lol
|
1

The way that the user interacts with file downloads should be left up to the browser.

In your example, your UI will tell them that the file is downloading, when in fact the browser will do the same thing.

You should simply use an anchor with the href set to the download location:

<a href="downloadlinkhere"> Download </a>

2 Comments

right !!! but it will be just loading so there are chances that user may click again something or same thing as he waits. tatz WY am blocking the UI
Right, but what I mean is that this is a Browser UX problem, and not a coding problem - unless there's any specific reason that you don't want your users to download 2 times if they click twice, then you should let the browser do its thing.
0

You can do it calling your sever side via AJAX. Here's an example on how to Block your UI when you make an ajax call.

Attach the Block/Unblock methods to the $(document).ready function. Every time an AJAX call is made, the UI is going to be blocked.

$(document).ready(function () {

}).ajaxStart(function () {
    $.blockUI();
}).ajaxStop(function () {
    $.unblockUI();
});

$(document).on("click", "#download", function () {
    DownloadFile();
}

function DownloadFile() {
    $.ajax({
        url: "../Home/Download",
        data: { null },
        success: function (data) {
            //Do something with data that is returned. (The downloaded file?)
        }
    });
}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.