Les paramètres ASP.NET MVC génèrent des fichiers PDF et peuvent être cliqués pour prévisualiser

Y2J
Libérer: 2017-05-09 11:22:11
original
4135 Les gens l'ont consulté

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>
Copier après la connexion

Code du contrôleur

 public ActionResult GetPdf()
 {
  return new FilePathResult("~/content/The Garbage Collection Handbook.pdf", "application/pdf");
 }
Copier après la connexion

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);
  }
 }
 }
Copier après la connexion

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文件预览");
 }
 }
Copier après la connexion

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" };
 }
Copier après la connexion

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>
Copier après la connexion

Effet final

[Recommandations associées]

1. Tutoriel vidéo gratuit ASP.NET

2 Tutoriel 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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!