PDF将ActionResult的提交按钮提交给RedirectToAction

时间:2014-07-14 18:47:11

标签: asp.net-mvc pdf fdf

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

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

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

到目前为止,一切正常,花花公子。

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

不同的情况会发生不同的事情:

使用Chrome查看PDF:

  • 什么都没发生

使用Adobe PDF查看PDF:

  • 打开位于%APPDATA%的文件(文件:/// 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");
    }

1 个答案:

答案 0 :(得分:1)

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

如果在“提交”按钮的点击事件中的PDF中,在执行实际提交的代码后添加了一行,则应该起作用:

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

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