Cet article présente principalement la méthode de prévisualisation directe des fichiers PDF dans les projets ASP.NET MVC, qui a une très bonne valeur de référence. Jetons-y un coup d'œil avec l'éditeur
Contexte et exigences.
Le projet utilise le framework MVC4 L'une des fonctions est de générer des fichiers PDF en fonction des paramètres et de les prévisualiser directement lorsque vous cliquez dessus.
Processus de mise en œuvre
1. Code de mise en œuvre de la première version :
Contenu HTML
@{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <title>Index</title> </head> <body> <p> @Html.ActionLink("预览PDF","GetPdf",null,new { target="_blank"}) </p> </body> </html>
Code du contrôleur
public ActionResult GetPdf() { return new FilePathResult("~/content/The Garbage Collection Handbook.pdf", "application/pdf"); }
Inconvénients : Le le titre et le nom du fichier téléchargé ne sont pas très conviviaux.
1. Code d'implémentation de la deuxième version :
Nous avons fait 2 choses :
1. Laissez la boîte de dialogue de téléchargement afficher un nom de fichier de téléchargement convivial.
2. Laissez les deux autres endroits du navigateur qui affichent GetPdf afficher également du contenu convivial.
Personnalisez l'ActionFilter et modifiez l'en-tête pour qu'il devienne en ligne. (Je ne sais pas s'il y aura des dangers cachés à le remplacer directement comme ça.)
public class MyPdfActionFilter : ActionFilterAttribute { public override void OnResultExecuted(ResultExecutedContext filterContext) { //Content-Disposition=attachment%3b+filename%3d%22The+Garbage+Collection+Handbook.pdf%22} var filerHeader = filterContext.HttpContext.Response.Headers.Get("Content-Disposition"); if (!string.IsNullOrEmpty(filerHeader) && filerHeader.Substring(0, "attachment".Length).ToLower().Equals("attachment")) { filterContext.HttpContext.Response.Headers["Content-Disposition"] = "inline" + filerHeader.Substring("attachment".Length, filerHeader.Length - "attachment".Length); } } }
Personnalisez ActionNameSelector pour implémenter l'interception et le jugement des noms d’actions.
public class MyActionNameSelecter : ActionNameSelectorAttribute { public override bool IsValidName(ControllerContext controllerContext, string actionName, MethodInfo methodInfo) { return actionName.Contains("-PDF文件预览"); } }
Le code dans le contrôleur est modifié comme suit
[MyActionNameSelecter] [MyPdfActionFilter] public ActionResult GetPdf() { return new FilePathResult("~/content/The Garbage Collection Handbook.pdf", "application/pdf") //增加FileDownloadName设置,但是这会让内容以附件的形式响应到浏览器(具体参考文件响应模式:内联和附件)。 //文件变成被浏览器下载。 { FileDownloadName = "The Garbage Collection Handbook.pdf" }; }
Contenu de la page Modifier comme suit
@{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <title>Index</title> </head> <body> <p> @* 第二个参数可能是一个动态生成的内容,需要ACTION中增加名称选择拦截,所以自定义了一个ActionNameSelectorAttribute类满足要求。 *@ @Html.ActionLink("预览PDF", "The Garbage Collection Handbook-PDF文件预览", null,new { target="_blank"}) </p> </body> </html>
Effet final
[Recommandations associées]
1. Tutoriel vidéo gratuit ASP.NET
3 Geek Academy ASP. Tutoriel vidéo .NET
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!