Comment mettre en œuvre de téléchargement de fichier avec l'AJAX et MVC
J'aimerais faire une opération de téléchargement de fichier en utilisant l'AJAX de jQuery appel avec certains paramètres sous MVC
exemple
(javascript)
function DoDownload(startDate) {
$.ajax({
url:"controller/GetFile/",
data: {startDate:startDate}
...
});
}
C# Controller Code
public void GetFile(string startDate) {
var results = doQuearyWith(startDate);
//Create file based on results
....
//HOw do I tell the server to make this a file download??
}
En général, je voudrais juste faire mon dossier de téléchargement d'un lien tel que:
<a h r e f="mycontroller/getfile/1"/>Download</a>
mais dans le cas ci-dessus, la date sera dynamique.
Si je ne l'utiliser ajax, ce serait un moyen privilégié pour transmettre les paramètres à la MVC du contrôleur à l'aide de javascript?
exemple:
window.location = "mycontroller/GetFile/" + $("#fromDate").val();
en supposant que la date est 12-25-2012
serait-ce de produire
mycontroller/GetFile/12/25/2012
serait MVC traiter cela comme trois params?
La réponse à votre question peut être trouvée dans [ce][1] lien. [1]: stackoverflow.com/questions/5826649/...
Sauf si vous avez besoin d'un "hackable" de l'URL, je ne suis pas sûr que vous devez le faire de cette façon. Il suffit de passer la date en paramètre à une méthode de contrôleur, puis utilisez les suggestions FileResult mise en œuvre. Vous pouvez peut-être rendre plus difficile qu'il doit être?
Sauf si vous avez besoin d'un "hackable" de l'URL, je ne suis pas sûr que vous devez le faire de cette façon. Il suffit de passer la date en paramètre à une méthode de contrôleur, puis utilisez les suggestions FileResult mise en œuvre. Vous pouvez peut-être rendre plus difficile qu'il doit être?
OriginalL'auteur Arcadian | 2012-12-30
Vous devez vous connecter pour publier un commentaire.
Ce que j'ai fini par faire, c'est appeler mon contrôleur de mon javascript comme:
mycontroller.cs
Ma préoccupation initiale était avec les paramètres de date. Je n'ai pas envie de devoir l'analyser.
Encore un commentaire, malgré des dates différentes dans le monde, il est très accepté maintenant partout dans le monde à utiliser la norme ISO-8601 à la place de tout autre format. Malheureusement MVC encapsule les dates d'une manière bizarre et ce n'est pas exactement le plus populaire. Je vous suggère de toujours utiliser ISO-8601 parce que vous pouvez changer votre contrôleur à l'avenir de manière plus facile.
Cela fonctionne parfaitement pour le téléchargement d'un fichier lorsqu'un appel Ajax jQuery ne fonctionne pas. Merci pour ce laconique, mais élégante solution!
OriginalL'auteur Arcadian
Vous pouvez utiliser le
File
méthode de contrôleur de classe pour retourner un fichier au navigateur.L'exemple ci-dessous retourne un fichier pdf.
En supposant
repositary.GetFileDedetails
méthode retourne les détails du fichier de l'id.Vous pouvez également renvoyer le fichier à partir d'un lieu physique(un chemin) ou d'un ruisseau. Vérifiez tous les surcharges de la
File
méthode et l'utilisation appropriée.Cela n'a rien à voir avec l'ajax. c'est normal
GET
demande sur un navigateur.OriginalL'auteur Shyju
À l'aide de la ActionLink helper, vous pouvez passer plusieurs paramètres à votre contrôleur:
Donc dans votre cas:
À l'aide de jQuery, vous pouvez modifier la valeur de la
startDate
en lien avec le contenu de votre sélecteur de date ou de la zone de texte.Puis, dans votre contrôleur, il suffit d'utiliser l'une des autres réponses ici, sur
FileResult
.Espère que cela vous aidera...
OriginalL'auteur Romias
Votre contrôleur de l'action méthode doit retourner un FileResult au lieu de void. Et il n'est pas nécessaire de le faire via AJAX - en fait, vous ne voulez pas le faire avec AJAX. Vous aurez besoin du navigateur impliqués de sorte qu'il sait de fournir une boîte de dialogue de téléchargement de l'utilisateur.
Voir ces liens:
De la manipulation d'un ASP.NET MVC FileResult retourné dans un (jQuery), Ajax appel
Téléchargement de fichier dans Asp.Net MVC 2
J'espère que cette aide.
Romias réponse ci-dessous montre comment transmettre les valeurs de votre méthode d'action à l'aide de la ActionLink.
OriginalL'auteur M.Ob