Tengo un formulario que los usuarios deben completar y enviar. La acción del controlador hace algo de trabajo y decide que el usuario puede tener un archivo y así redirige a otra acción que es un FilePathResult.¿Cuál es la forma MVC de enviar un archivo simultáneamente y redirigir a una página nueva?
[CaptchaValidator]
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Index(FormCollection collection)
{
// do some stuff ...
return RedirectToAction("Download");
}
[AcceptVerbs(HttpVerbs.Get)]
public FilePathResult Download()
{
var fileName = "c:\foo.exe";
return File(fileName, "application/octet-stream", "installer.exe");
}
Lo que me gustaría hacer es redirigir al usuario a otra página que, gracias al usuario para descargar el archivo, pero no estoy seguro de cómo llevar a cabo de una manera que "MVC-like".
La única forma en que puedo pensar en la parte superior de mi cabeza es omitir la acción de descarga y en su lugar redirigir a la acción Thank You, y hacer que ThankYou use javascript para enviar el archivo. Pero esto simplemente no me parece muy MVC. ¿Hay un mejor enfoque?
Resultados:
La respuesta aceptada es lo suficientemente correcta, pero yo quería mostrar implementé ella.
Los cambios acción index donde se redirige a:
return RedirectToAction("Thankyou");
he añadido este controlador (y la vista) para mostrar al usuario de cualquier "información de descarga posterior" y decir gracias por la descarga del archivo. El atributo AutoRefresh que obtuve de link text muestra otros usos excelentes.
[AutoRefresh(ControllerName="Download", ActionName="GetFile", DurationInSeconds=3)]
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult Thankyou()
{
return View();
}
La acción que consiguen es redirigido a la misma como lo era antes:
[AcceptVerbs(HttpVerbs.Get)]
public FilePathResult GetFile()
{
var fileName = "c:\foo.exe";
return File(fileName, "application/octet-stream", "installer.exe");
}
Gracias ... su respuesta me llevan a una investigación diferente en el que me encontré con esta página: http: //weblogs.asp.net/rashid/archive/2009/04/29/fun-with-http-headers-in-asp-net-mvc-action-filters.aspx –
Genial, me alegro de poder ayudarte. Me gusta el método de atributo. ¿Lo mantiene luciendo bien? Pero no es menos MVC solo para agregar encabezados manualmente si los requiere. – Sekhat