У меня есть контроллер с двумя страницами, указатель и загрузка, при нажатии на загрузку он извлекает байт [] из службы, и я использую Response.BinaryWrite для сохранения файл. Проблема заключается в том, что при использовании Response.Clear он останавливает страницу загрузки из рендеринга, но загружает файл успешно. Есть ли способ загрузить файл и отобразить страницу?Практическое руководство. Сохранение файла из веб-службы без остановки страницы из рендеринга
Я использую .NET 4, ASP, Монорельс замок, C#
Я знаю, что с помощью MVC я могу использовать ActionResult и FileResult как типы возвращаемых для моих взглядов, я тем не менее ограничен использованием Замок Monorail из-за того, что это существующий проект, который я недавно приобрел, и не имею никакого веса в изменении его технологии.
Ниже приведен мой пример кода
public class MyController : Controller
{
public void Index()
{
PropertyBag["includeZeroBalances"] = false;
PropertyBag["toDate"] = DateTime.Today.ToShortDateString();
}
public void Download(bool includeZeroBalances, DateTime toDate)
{
MyProxy proxy = GetProxy();
byte[] file = proxy.GetFile(includeZeroBalance, toDate);
Response.Clear();
Response.ContentType = "application/zip";
Response.AppendHeader("Content-Disposition", "attachment; filename="TestFileName.zip");
Response.BinaryWrite(file);
}
}
Здесь индекс страницы
${Form.FormTag({@action: 'Download'})}
<table>
<tr>
<td>${Form.LabelFor("toDate", "To Date (yyyy/mm/dd):")}</td>
<td><input type="text" id="toDate" name="toDate" value="${?toDate}" /></td>
</tr>
<tr>
<td>${Form.LabelFor("includeZeroBalances", "Include Zero Balances:")}</td>
<td>${Form.CheckboxField("includeZeroBalances")}</td>
</tr>
<tr>
<td> </td>
<td>${Form.Submit("Download", {@class: 'submitb'})}</td>
</tr>
</table>
${Form.EndFormTag()}
Здесь загрузка страницы
<table>
<tr>
<td>Your file has been downloaded successfully</td>
</tr>
</table>
Привет Маурисио, спасибо вам за ссылки и прозрение, которое вы предоставили. К сожалению, это было не совсем то, что я искал. –
@ROFFELPOMP: ну, это именно то, что вы сделали в своем ответе. –