2010-11-13 12 views
5

Qualche idea su come risolvere il problema?Implementare TransferResult in MVC 3 RC - non funziona

C'è una grande implementazione di TransferResult disponibile here, che ha funzionato benissimo su MVC 1,2 ma non funziona su 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); 
    } 
} 

Il MVC 3 RC, httpHandler.ProcessRequest fallisce e dice 'HttpContext.SetSessionStateBehavior' can only be invoked before 'HttpApplication.AcquireRequestState' event is raised.

come riscrivere il codice per fare questo lavoro?

UPD: Il codice funziona se eseguito su VS 2010 built-in server di sviluppo, ma non riesce a funzionare su IIS 7.5 localhost. Il problema è ancora irrisolto.

UPD2 Questa answer contains a modified implementation di TransferResult che funziona con MVC3. Risulta che è ancora più semplice di un tempo.

+0

hai mai fix questo problema? –

+1

sì, ecco la soluzione di lavoro: http://stackoverflow.com/questions/799511/how-to-simulate-server-transfer-in-asp-net-mvc/1242525#1242525 – Andy

risposta

0

Personalmente ritengo che la creazione di percorsi (con vincoli di percorso se necessario (vedere http://stephenwalther.com/blog/archive/2008/08/07/asp-net-mvc-tip-30-create-custom-route-constraints.aspx) è di gran lunga preferibile a questo 'incidere' che tenta di eseguire un reindirizzamento invisibile in modo che la richiesta viene gestita da un controllore e di azione diverso da quello specificato dirigendo

Perché non si può semplicemente utilizzare il routing

+1

Uso TransferResult per l'implementazione della gestione degli errori : l'azione o la vista della pagina corrente viene elaborata e, se accade qualcosa, viene eseguito un trasferimento. – Andy

1

in grado di riprodurre i seguenti lavori perfettamente bene in MVC 3 RC (Razor e 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

Questo codice funziona correttamente se si utilizza Visual Studio Devt Server per il debug. Tuttavia, si verifica l'errore sopra riportato quando si esegue l'applicazione sul server IIS locale. Non avevo ancora la possibilità di testare l'app su un server remoto, ma ho osservato chiaramente la differenza di comportamento in queste due configurazioni sul computer locale. – Andy

Problemi correlati