2010-11-11 18 views
1

Je travaille sur une application ASP.NET. Actuellement, lorsque l'utilisateur clique sur "Sauvegarder" sur un élément, nous désactivons le bouton Enregistrer, changeons son texte en "Enregistrement ..." et ainsi de suite. Cela fonctionne correctement, car le bouton provoque une publication qui entraîne le chargement d'une nouvelle page, sur laquelle le bouton Enregistrer n'est plus désactivé. Nous voulons maintenant l'appliquer à d'autres actions: Publier (pas très différent de Enregistrer), Importer (encore une fois, un peu comme Sauvegarder, mais basé sur les données que l'utilisateur a téléchargées dans une étape précédente), Exporter (télécharger un fichier XML fichier à l'utilisateur) etc.Après la désactivation d'un bouton Envoyer avec JS, réactivez-le après le téléchargement du fichier

L'exportation me cause des problèmes - le bouton reste désactivé. Je pense que c'est parce que le serveur renvoie un fichier XML plutôt qu'une nouvelle page web, et donc le navigateur n'affiche que la même page.

Le code côté serveur est le long des lignes de

Response.Clear(); 
Response.BufferOutput = true; 
Response.ContentType = "text/xml"; 
Response.AppendHeader("Content-Disposition", "attachment; filename=" + whatever); 
[push file contents into Response.OutputStream] 
Response.End(); 

[Aucune idée si cela est bon code ou pas - c'est pas à moi - mais il fait le travail :)]

Fondamentalement, Je voudrais savoir soit:

  • une façon de rendre le serveur envoyer une nouvelle page de retour dans la réponse ainsi que le XML, re-enablnig ainsi le bouton de la même manière que les autres pages font, ou
  • un moyen d'obtenir le navigateur/JS pour réactiver le bouton une fois le fichier a été envoyé.

Répondre

0

Le problème est probablement que vous ne chargez pas du tout une nouvelle page.

Étant donné que la disposition du contenu est une pièce jointe, le navigateur ne rechargera pas la page mais enregistrera uniquement le retour du serveur sur le disque.

Vous avez besoin de recharger la page un peu mais je n'ai pas vraiment de bonne idée sur la façon de le faire après un chargement de fichier.

1

On dirait que this devrait le faire: essentiellement, définir un cookie avec la réponse du fichier, et avoir le navigateur en attente de ce cookie afin de débloquer la page.

0

Il y a un hack sale. Vous pouvez utiliser la méthode setTimeOut pour activer et modifier la légende/image du bouton précédent.

Vous pouvez écrire un code côté serveur similaire à

btn.Attributes.Add ("onclick", « this.disabled = 'true'; This.value = 'Traitement ...'; _ doPostBack (this, null); setTimeout (function() {activer le bouton logique .... régler le texte/img du bouton},); "); L'événement de pièce jointe de téléchargement côté serveur ne sera pas parfaitement synchronisé, mais vous pouvez définir un délai de 2 à 5 secondes en fonction de la configuration de votre serveur.

Merci!