2015-08-20 2 views
2

Когда пользователь заполнил форму, пользователь перенаправляется на страницу с благодарностью. Страница благодарности выведет ее, но также загрузит файл (pdf/a stream).Render view and download file in the same request

Я бы предпочел сделать это, не используя javascript вроде этого return both a file and a rendered view in an MVC3 Controller action, и я бы предпочел получить диалог «Сохранить как».

Имеет ли MVC любые соглашения, которые могут справиться с этим?

+1

Вы не можете ответить в 2 отзывых. Лучшее, что вы можете сделать, это запустить второй запрос из представления в соответствии с связанным ответом. –

+0

Любая конкретная причина, по которой кнопка на загружаемой странице не подходит. Поскольку Лично я бы только ассоциировал подобные действия с изворотливыми веб-сайтами. – P6345uk

ответ

2

Как отметил @BenRobinson, вы не можете вернуть два ответа от одного запроса. Нет, у MVC нет никаких соглашений, чтобы справиться с этим, поскольку это фундаментальное ограничение платформы, которую вы разрабатываете, в Интернете и, в частности, протоколах TCP/IP и HTTP.

По существу, сеть вращается вокруг так называемого цикла запроса-ответа. Клиент (обычно веб-браузер) выдает запрос на сервер, и этот сервер отвечает запрошенным ресурсом. То, о чем вы говорите, было бы похоже на запрос-ответ-ответ, что невозможно. Сервер не может просто отправить и отправить ответ клиенту без предварительного получения запроса.

В результате, ваши варианты:

  1. Использование JavaScript программно выдать другой запрос, например, путем установки location.href как принятый ответ на который вам посоветует связан вопрос.

  2. Предоставьте ссылку/кнопку/чтобы разрешить пользователю инициировать запрос файла вручную.

Всё. В любом случае вам понадобится новый запрос, инициированный JavaScript или конечным пользователем для получения файла.

1

Вы попробовали meta refresh Trick.

<META HTTP-EQUIV='REFRESH' CONTENT='5;URL=http://www.example.com/test.txt'> 

Не забудьте установить заголовок Content-Disposition: attachment для файла, который вы хотите загрузить в браузере.

+0

Nice catch. Я всегда забываю о метаобновлении, так как это так «90-е»; он оставил мой мозг примерно в то же время, что и мигающий тег. Anways, да, это будет совершенно правильный третий вариант, и опять же другой способ выдачи второго запроса, который необходим для получения вашего второго ответа. –

+0

Я все еще использую этот тег для того, чтобы сделать так много всего. работа потрясающая даже сегодня. – Adrian