【问题标题】:PDF submit button to ActionResult to RedirectToActionPDF 提交按钮到 ActionResult 到 RedirectToAction
【发布时间】:2014-07-14 18:47:11
【问题描述】:

我遇到了提交 PDF 表单的问题,我似乎在网上找不到任何帮助,希望 stackoverflow 可以帮助我。

我有一个最终用户将下载的 PDF 表单。单击下载链接后,我将在 PDF 中动态插入一个提交按钮。附加到按钮的 URL 指向我创建的名为 ProcessSubmit 的 ActionResult。它接受 2 个参数,ID 和版本。

用户填写表单并点击提交后,我从 Request.InputStream 中检索 FDF 数据并更新服务器上的 PDF 表单。

到目前为止,一切正常。

当我想返回我的 MVC 项目中的一个页面(索引,来自我运行 ProcessSubmit 的同一控制器)时,我的问题就出现了。

不同的场景会发生不同的事情:

使用 Chrome 查看 PDF:

  • 什么都没有发生

使用 Adob​​e PDF 查看 PDF:

  • 打开位于 %APPDATA% 的文件(file:///C:/Users/USERNAME/AppData/Local/Temp/acrord32_sbx/A9RD9D8.htm) - 此文件似乎是我的登录页面的损坏版本。

我的代码:

    /// <summary>
    /// Requests the form.
    /// </summary>
    /// <param name="id">The identifier.</param>
    /// <param name="version">The version.</param>
    /// <returns></returns>
    public ActionResult RequestForm(Guid id, int version)
    {
        if (ControllerContext.HttpContext.Request.Url != null)
        {
            var processSubmitUriString =
                Url.Action("ProcessSubmit", "Forms", null, ControllerContext.HttpContext.Request.Url.Scheme);
            var processSubmitUrl = String.Format("{0}?id={1}&version={2}", processSubmitUriString, id, version);
            var source = _FormsProxy.GetPatientClinicalOrderStream(id, version, processSubmitUrl);
            if (source != null)
            {
                return File(source, "application/pdf", string.Format("YourForm_{0}.pdf", DateTime.Now.ToString("MMddyyyy-HHmmss")));
            }
        }
        return null;
    }

    /// <summary>
    /// Processes the submit.
    /// </summary>
    /// <param name="id">The identifier.</param>
    /// <param name="version">The version.</param>
    /// <returns></returns>
    public ActionResult ProcessSubmit(string id, int version)
    {
        using (var sr = new StreamReader(Request.InputStream))
        {
            var fdfStream = sr.ReadToEnd();
            var fields = FDFParser.Parse(fdfStream.Replace(">>", ">>\r\n"));
            _FormsProxy.UpdatePatientClinicalOrderFromSubmittedData(new Guid(id), version, fields.Fields);
        }
        return RedirectToAction("Index");
    }

【问题讨论】:

  • 您是否尝试过使用指定的完整网址进行重定向?使用 return Redirect(url);.
  • 重定向到Index时调用哪个方法?你能展示一下那个方法吗?

标签: asp.net-mvc pdf fdf


【解决方案1】:

我认为你做不到。您的提交来自 Acrobat 的 POST,因此重定向被发送到该位置。 Acrobat 不知道如何处理重定向。

如果在您的 PDF 中的“提交”按钮的单击事件中,您应该在执行实际提交的代码之后添加一个附加行:

app.launchURL("http://foo.com/Index/000 (your ID)", true);

(“true”将导致 Acrobat 在新的浏览器窗口中打开 URL,默认为“false”,即在 Acrobat 中加载 URL)。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-13
  • 2019-07-18
  • 1970-01-01
相关资源
最近更新 更多