2010-11-13 14 views
5

Aşağıdakiler nasıl düzeltileceğine dair bir fikriniz var mı?MVC 3'te Transfer Sonuç Uygulaması RC - çalışmıyor

MVC 1,2 üzerinde harika çalıştı, ancak MVC 3 RC üzerinde çalışmayan bir TransferResult here, büyük bir uygulama var. MVC 3 RC On

public class TransferResult : RedirectResult 
{ 
    public TransferResult(string url): base(url) 
    { 
    } 

    public override void ExecuteResult(ControllerContext context) 
    { 
     var httpContext = HttpContext.Current; 
     httpContext.RewritePath(Url, false); 
     IHttpHandler httpHandler = new MvcHttpHandler(); 
     httpHandler.ProcessRequest(HttpContext.Current); 
    } 
} 

, httpHandler.ProcessRequest başarısız olur ve 'HttpContext.SetSessionStateBehavior' can only be invoked before 'HttpApplication.AcquireRequestState' event is raised.

nasıl bu işi yapmak için bu kodu yeniden yazmak diyor?

UPD: Kod, VS 2010 yerleşik geliştirme sunucusunda çalıştırılıyor, ancak IIS 7.5 localhost üzerinde çalışamazsa çalışır. Sorun hala çözülmedi.

UPD2 Bu MVC3 ile çalışan TransferResult'un answer contains a modified implementation'u. Ortaya çıktığı zamandan bile daha basittir.

+0

hiç düzeltti bu sorun? –

+1

Evet, işte çalışma çözümü: http://stackoverflow.com/questions/799511/how-to-simulate-server-transfer-in-asp-net-mvc/1242525#1242525 – Andy

cevap

0

Yolları oluşturmanın (gerekirse rota kısıtlamalarıyla birlikte) (bkz. http://stephenwalther.com/blog/archive/2008/08/07/asp-net-mvc-tip-30-create-custom-route-constraints.aspx), bu isteğin görünmez bir yönlendirmeyi gerçekleştirmeye çalışan "hack" e çok daha fazla tercih edildiğini ve böylece isteğin farklı bir denetleyici ve eylem tarafından ele alınacağını düşünüyorum. yönlendirme ile belirtilen

sadece yönlendirme kullanamazsınız Neden

+1

Hata işlemeyi uygulamak için TransferResult kullanıyorum : Geçerli sayfa eylemi veya görünümü işleniyor ve bir şey olursa, aktarım gerçekleştirilir. – Andy

1
MVC 3 tamamen normal aşağıdaki eserlerini RC (Jilet ve WebForms) yeniden açılamıyor

:.?.

public class TransferResult : RedirectResult 
{ 
    public TransferResult(string url) 
     : base(url) 
    { 
    } 

    public override void ExecuteResult(ControllerContext context) 
    { 
     var httpContext = HttpContext.Current; 
     httpContext.RewritePath(Url, false); 
     IHttpHandler httpHandler = new MvcHttpHandler(); 
     httpHandler.ProcessRequest(HttpContext.Current); 
    } 
} 

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     return new TransferResult("/Home/About"); 
    } 

    public ActionResult About() 
    { 
     return View(); 
    } 
} 
+1

Hata ayıklama için Visual Studio Devt Server'ı kullanıyorsanız, bu kod düzgün çalışır. Ancak, uygulamayı yerel IIS sunucusunda çalıştırırken yukarıdaki hatayı yaşıyorum. Uygulamayı uzak bir sunucuda test etme şansım olmadı, ancak bu iki yapılandırmadaki davranış farklılığını yerel makinede açıkça gözlemledim. – Andy

İlgili konular