Кнопка отправки PDF в ActionResult для RedirectToAction

Я сталкиваюсь с проблемой с отправкой формы PDF, и я не могу найти какую-либо помощь онлайн, надеюсь, stackru и может помочь мне.

У меня есть PDF-форма, которую конечный пользователь скачает. После нажатия на ссылку для загрузки я динамически вставлю кнопку отправки в PDF. URL-адрес, прикрепленный к кнопке, указывает на созданный мной ActionResult, который называется ProcessSubmit. Он принимает 2 параметра, ID и версию.

После того как пользователь заполняет форму и нажимает кнопку Отправить, я извлекаю данные FDF из Request.InputStream и обновляю форму PDF на сервере.

До этого момента все отлично работает и денди.

Моя проблема возникает, когда я хочу вернуться на страницу в своем проекте MVC (Index, с того же контроллера, с которого я запускаю 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 ответ

Решение

Я не думаю, что вы можете сделать это. Ваша заявка поступает из POST от Acrobat, и именно туда отправляется перенаправление. Acrobat не знает, что делать с перенаправлением.

Что должно работать, если в вашем PDF-файле в событии click кнопки "Submit" вы добавите дополнительную строку после кода, который выполняет фактическую отправку:

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

("true" приведет к тому, что Acrobat откроет URL-адрес в новом окне браузера, по умолчанию используется значение "false", которое загружает URL-адрес в Acrobat).

Другие вопросы по тегам