c# - ASP.NET MVC - 在新选项卡上有条件地打开 PDF/图像

标签 c# asp.net-mvc pdf reportviewer rdlc

这里我有一个过滤报告页面,我可以在其中过滤报告的一些信息(RDLC,返回 PDF 或图像文件)。今天,此页面总是在新选项卡上返回文件,因为我正在使用这个:

@using (Html.BeginForm("Report", "ReportController", FormMethod.Post, new { target = "_blank" }))

我的 ReportController 返回一个 FileContentResult,如下所示:

return File(renderedBytes, mimeType, fileName + "." + fileNameExtension);

但是,此页面有一些服务器端验证,并且回发总是发生在新创建的选项卡上,而不是在单击提交按钮的原始选项卡上。只有当 ModelState 没有错误时,有没有办法返回新页面(target =“_blank”,带有生成的 PDF 或图像)?如果有错误,我想留在报告过滤页面。

提前谢谢你。

最佳答案

您可以将报告生成分成两个单独的操作。

1. 使用新属性 Target、Action 扩展您的 View 模型(这将帮助您动态更改表单属性)。

   [HttpGet]
    function ActionResult Report()
    {
       var model = new ReportViewModel{ Target = "_self", DownloadFile = false, Action = "Report" };    
       return View(model);
    }

2.验证您的模型并在模型状态有效的情况下将这些属性设置为新值

[HttpPost]
function ActionResult Report(ReportViewModel model)
{
   if (ModelState.IsValid)
   {
      model.DownloadFile = true;
      model.Action = "DownloadReport";
      model.Target = "_blank";
      return View(model);
   }
   else
   {
      // server side error occurred
      return View(model);
   }
}

3.使用jquery自动执行第二次表单提交到新的目标 Action

@using (Html.BeginForm(Model.Action, "ReportController", FormMethod.Post, new { target = Model.Target, id = "MyForm" }))
{
     @Html.HiddenFor(m => m.Action);
     @Html.HiddenFor(m => m.Target);

     @if(Model.DownloadFile)
     {
        <script>$(document).ready(function () { $("#MyForm").submit(); }</script>
     }
     // other form elements
}

3.处理第二个表单提交:

[HttpPost]
function ActionResult DownloadReport(ReportViewModel model)
{
   // generate file
   return File(renderedBytes, mimeType, fileName + "." + fileNameExtension);
}

关于c# - ASP.NET MVC - 在新选项卡上有条件地打开 PDF/图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26465940/

相关文章:

c# - 如何重用 Get-VMMServer 连接?

c# - 带有 MVVMLight 可移植库的两个位置的“System.ComponentModel.INotifyPropertyChanging”

javascript - 更新/返回 ViewModel 返回服务器

r - 如何以智能方式将互联网上的图像插入到 R bookdown 生成的 pdf 文件中?

c# - 从查询返回列表

c# - GAC 对象的配置文件

c# - 使用单个输入上传多个文件 Asp Mvc

asp.net-mvc - 构建错误 - 'System.Web.Mvc.ModelClientValidationRule' 冲突

excel - 使用 C# 在 Excel .xls 中嵌入 PDF 文件

c# - 打印多个 PDF 文件而不显示打印机对话框