2010-11-13 4 views
5

Jakieś pomysły, jak rozwiązać poniższy problem?Wdrażanie TransferResult w MVC 3 RC - nie działa

Istnieje doskonała implementacja TransferResult dostępna here, która działała świetnie na MVC 1,2, ale nie działa na MVC 3 RC.

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

Na MVC 3 RC, httpHandler.ProcessRequest nie powiedzie się i mówi 'HttpContext.SetSessionStateBehavior' can only be invoked before 'HttpApplication.AcquireRequestState' event is raised.

Jak przepisać ten kod do tej pracy?

UPD: Kod działa, jeśli działa na wbudowanym serwerze programistycznym VS 2010, ale nie działa na lokalnym hoście IIS 7.5. Problem jest nadal nierozwiązany.

UPD2 Ten answer contains a modified implementation TransferResult, który działa z MVC3. Okazuje się, że jest jeszcze prostsze niż kiedyś.

+0

czy kiedykolwiek naprawić ten problem? –

+1

Tak, tutaj jest działające rozwiązanie: http://stackoverflow.com/questions/799511/how-to-simulate-server-transfer-in-asp-net-mvc/1242525#1242525 – Andy

Odpowiedz

0

Osobiście uważam, że tworzenie tras (w razie potrzeby z ograniczeniami trasy (zob. http://stephenwalther.com/blog/archive/2008/08/07/asp-net-mvc-tip-30-create-custom-route-constraints.aspx) jest zdecydowanie lepsze od tego "hacka", który próbuje wykonać niewidoczne przekierowanie, aby żądanie było obsługiwane przez inny kontroler i działanie niż ten określony przez routing

Dlaczego nie można po prostu użyć routingu

+1

Używam TransferResult do implementacji obsługi błędów : trwa przetwarzanie bieżącej akcji lub widoku strony, a jeśli coś się stanie, zostanie wykonany transfer. – Andy

1

nie można odtworzyć następujące prace perfekcyjnie w MVC 3 RC (brzytwa i WebForms):.?.

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

Ten kod działa poprawnie, jeśli do debugowania jest używany program Visual Studio Devt Server. Jednak wystąpił powyższy błąd podczas uruchamiania aplikacji na lokalnym serwerze IIS. Nie miałem jeszcze okazji przetestować aplikacji na zdalnym serwerze, ale wyraźnie zauważyłem różnicę w zachowaniu w tych dwóch konfiguracjach na komputerze lokalnym. – Andy