11
votes

Page de mise à jour après le téléchargement de fichier

Je mets ensemble un script de téléchargement après une aide merveilleuse de la pile débordant de l'autre jour. Cependant, j'ai maintenant trouvé qu'après télécharger le fichier, je dois recharger la page pour vous débarrasser du modèle de progression de la page ASPX. Le code pour supprimer le modèle fonctionné avant que j'ai ajouté dans le code de téléchargement.

code pour supprimer le modèle de progression: upfinancemasterscreen.update ();

J'ai essayé d'appeler cela avant et après la redirection sur le IHTTTPHANDLER xxx

merci pour toute aide que vous pouvez fournir!


0 commentaires

4 Réponses :


33
votes

Lorsque vous renvoyez un fichier à télécharger un fichier à télécharger, que est la requête HTTP. En d'autres termes, vous pouvez avoir un post-arrière qui rafraîchit la page du navigateur ou Vous pouvez envoyer un fichier à télécharger un fichier à télécharger. Vous ne pouvez pas faire les deux sans astuces spéciales.

C'est pourquoi la plupart des sites lorsque vous téléchargez un fichier, il premier vous emmène à une nouvelle page indiquant: "Votre téléchargement est sur le point de commencer", puis "redirige ensuite" vous "redirige" à la Fichier à télécharger à l'aide de Meta-Achèse ou JavaScript.

Par exemple, lorsque vous allez ici pour télécharger le fichier .NET 4:

http://www.microsoft.com/downloads/fr/confirmation.aspx?familyID=0A391ABD-25C1-4FC0- 919F-B21F31AB88B7 & displayLang = EN & PF = true

Il rend la page, puis utilise la balise méta-actualisée suivante pour donner à l'utilisateur le fichier à télécharger: xxx < / Pré>

Vous devrez probablement faire quelque chose de similaire dans votre application. Toutefois, si vous êtes vraiment intéressé à faire quelque chose après le fichier est complètement téléchargé, vous n'avez pas de chance, car il n'y a aucun événement pour communiquer cela au navigateur. Le seul moyen de faire est un Ajax Télécharger comme Gmail utilise lorsque vous téléchargez une pièce jointe.


2 commentaires

Merci! Je ne pensais pas que c'était potentiel mais je pensais juste que je demanderais.


Comme vous ne pouvez pas avoir à la page la même page, pourquoi ne pas le faire en utilisant deux pages! Mon approche consiste à mettre à jour, puis à figurer une autre page (à l'aide de JavaScript Windows.Open ()) pour gérer le téléchargement. Vous pouvez souhaiter vérifier page.clientcript.registerstartupscript . J'espère que cela aide les autres.



10
votes

Dans mon cas, j'utilisais MVC et je voulais juste que la page soit actualisée quelques secondes après la sélection du bouton de téléchargement afin de montrer le nouveau compte de téléchargement. Je retourne le fichier du contrôleur.

Pour ce faire, je modifiais simplement la vue en ajoutant un événement OnClick au bouton de téléchargement qui appelé script suivant (également dans la vue): p>

setTimeout(function () {
        window.location.reload(1);
    }, 5000);


3 commentaires

Merci pour une bonne approche.


Belle solution de contournement m'a sauvé un mal de tête. Pas une solution fantaisie et peut présenter un problème si le jeu de valeur de retard est inférieur au temps qu'il faut pour le téléchargement, mais cela fonctionne même avec ASP.NET WebForm Commands.


Dans ce cas, si le serveur prend plus de 5 secondes pour traiter votre demande, votre fichier ne sera peut-être pas téléchargé.



2
votes

Ceci est rapide et facile à pirater si nécessaire.

Étape 1: stry> Ajouter un bouton caché à .AsASPX Page: P>

ClientScriptManager cs = Page.ClientScript;
cs.RegisterStartupScript(this.GetType(), "modalstuff", "$('.btnExportUploaded').click();", true);


0 commentaires

0
votes

Une approche plus simple consiste à faire tout ce qui est nécessaire dans l'événement code> postback code> et enregistrez un script de recharge avec un argument supplémentaire pour indiquer le téléchargement. Quelque chose comme:

C # code: p> xxx pré>

puis, dans pageload code> Nous devons vérifier le paramétrateur de téléchargement et servir le fichier: P>

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            int printId;
            if (Request.QueryString["printId"] != null && int.TryParse(Request.QueryString["printId"], out printId))
            {
                // Check if the argument is valid and serve the file. 
            }
            else
            {
                // Regular initialization
            }
        }
    }


0 commentaires