Кнопка отправки 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).