2009-07-06 11 views
8

Kullanıcıların doldurup göndermesi gereken bir formum var. Denetleyici eylemi bazı işler yapar ve kullanıcının bir dosyaya sahip olabileceğine karar verir ve böylece bir FilePathResult olan başka bir eyleme yönlendirir. Ben yapmak istiyorum neBir dosyayı aynı anda göndermenin ve yeni bir sayfaya yönlendirmenin MVC yolu nedir?

[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"); 
    } 

başka bir sayfaya yönlendirmek olan teşekkürler dosya indirme ama "MVC benzeri" şekilde bunu başarmak için nasıl emin değilim için kullanıcı.

Başımın üstünden düşünebilmemin tek yolu, İndirme eylemini atlamak ve bunun yerine, ThankYou eylemine yeniden yönlendirmek ve dosyayı göndermek için javascript kullanarak ThankYou görünümünün kullanılmasını sağlamaktır. Ama bu bana çok MVC görünmüyor. Daha iyi bir yaklaşım var mı?

Sonuçlar:

kabul cevabı yeterince doğrudur ama onu uygulamaya göstermek istedim.

o yönlendirir Endeksi eylem değişiklikleri:

 return RedirectToAction("Thankyou"); 

Ben herhangi bir "sonrası indir bilgileri" kullanıcıya gösterileceğini ve dosya indirme için teşekkür etmek bu kontrolör (ve görünümü) eklenmiştir. Diğer bazı mükemmel kullanımları gösteren link text'dan yakaladığım AutoRefresh özniteliği.

[AutoRefresh(ControllerName="Download", ActionName="GetFile", DurationInSeconds=3)] 
    [AcceptVerbs(HttpVerbs.Get)] 
    public ActionResult Thankyou() 
    { 
     return View(); 
    } 

önce olduğu gibi bu aynıdır yönlendirilmiş olsun eylemi:

[AcceptVerbs(HttpVerbs.Get)] 
    public FilePathResult GetFile() 
    { 
     var fileName = "c:\foo.exe"; 
     return File(fileName, "application/octet-stream", "installer.exe"); 
    } 

cevap

11

Sadece yönlendirildi sayfa için eylem, Yanıtınız için bir başlık ekleyin.

Googling bu başlıkla geldi: Senin durumunda

Refresh: 5; URL=http://host/path 

URL, indirme eylemi okuyordum sayfa söylediği gibi

için URL ile değiştirilirken, sayısı 5'tir URL'ye "yenilenmek" için beklenecek saniye sayısı. http:

+0

teşekkürler ... Cevabınız ben bu sayfayı bulduğu bazı farklı araştırma bana yol :) bir indirme olma dosyası ile

, sizin güzel yönlendirme sayfanın dışına taşımak gerekir: //weblogs.asp.net/rashid/archive/2009/04/29/fun-with-http-headers-in-asp-net-mvc-action-filters.aspx –

+1

Harika, memnun olabilirim. Öznitelik yöntemini beğendim. Güzel görünmesini sağlıyor. Ancak, eğer gerekliyse, sadece üstbilgileri el ile eklemek daha az MVC değildir. – Sekhat

İlgili konular