【问题标题】:ASP.NET MVC - Conditionally open PDF/Image on new TabASP.NET MVC - 有条件地在新选项卡上打开 PDF/图像
【发布时间】:2014-12-15 10:51:42
【问题描述】:

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

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

而我的ReportController返回一个FileContentResult,如下图:

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

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

提前谢谢你。

【问题讨论】:

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


    【解决方案1】:

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

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

       [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自动执行第二次表单提交到新的目标动作

    @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);
    }
    

    【讨论】:

    • 感谢您回答@MajoB。我会检查一下。
    猜你喜欢
    • 2013-04-03
    • 2016-05-04
    • 2015-11-14
    • 1970-01-01
    • 2019-04-12
    • 2015-06-11
    • 1970-01-01
    • 1970-01-01
    • 2018-01-23
    相关资源
    最近更新 更多