Téléchargement de fichier dans Asp.Net MVC 2

Je veux activer le fichier télécharger dans mon application MVC, sans simplement à l'aide d'un lien hypertexte. J'ai l'intention d'utiliser une image ou similaires et de le rendre cliquable en utilisant jQuery. Pour le moment j'ai une simple juste pour le test.

J'ai trouvé une explication de faire le téléchargement par le biais d'une méthode d'action, mais malheureusement l'exemple avait encore actionlinks.

Maintenant, je peux appeler le téléchargement de la méthode d'action, mais rien ne se passe. Je suppose que je dois faire quelque chose avec la valeur de retour, mais je ne sais pas quoi ou comment.

Voici la méthode de l'action:

    public ActionResult Download(string fileName)
    {
        string fullName = Path.Combine(GetBaseDir(), fileName);
        if (!System.IO.File.Exists(fullName))
        {
            throw new ArgumentException("Invalid file name or file does not exist!");
        }

        return new BinaryContentResult
        {
            FileName = fileName,
            ContentType = "application/octet-stream",
            Content = System.IO.File.ReadAllBytes(fullName)
        };
    }

Voici la BinaryContentResult classe:

public class BinaryContentResult : ActionResult
{
    public BinaryContentResult()
    { }

    public string ContentType { get; set; }
    public string FileName { get; set; }
    public byte[] Content { get; set; }

    public override void ExecuteResult(ControllerContext context)
    {

        context.HttpContext.Response.ClearContent();
        context.HttpContext.Response.ContentType = ContentType;

        context.HttpContext.Response.AddHeader("content-disposition",

                                               "attachment; filename=" + FileName);

        context.HttpContext.Response.BinaryWrite(Content);
        context.HttpContext.Response.End();
    }
}

J'appelle la méthode de l'action par le biais de:

<span id="downloadLink">Download</span>

qui est fait cliquable par:

$("#downloadLink").click(function () {
    file = $(".jstree-clicked").attr("rel") + "\\" + $('.selectedRow .file').html();
    alert(file);
    $.get('/Customers/Download/', { fileName: file }, function (data) {
        //Do I need to do something here? Or where?
    });
});

Noter que le paramètre fileName est reçu correctement par la méthode de l'action et tout et tout, c'est juste que rien ne se passe donc je suppose que j'ai besoin de traiter la valeur de retour d'une certaine manière?

Votre BinaryContentResult classe ne devrait pas exister. Utilisation FileResult.
Ok, est une norme de classe ou quelque chose? Comment serait-il m'aider à résoudre le problème?

OriginalL'auteur Anders | 2010-08-30