2010-11-13 73 views
5

任何想法如何解決以下問題?在MVC 3 RC中實現TransferResult - 不起作用

TransferResult的一個很好的實現可用here,它在MVC 1,2上運行良好,但在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); 
    } 
} 

在MVC 3 RC,httpHandler.ProcessRequest失敗,並說:'HttpContext.SetSessionStateBehavior' can only be invoked before 'HttpApplication.AcquireRequestState' event is raised.

如何重寫這段代碼,使這項工作?

UPD:代碼在VS 2010內置開發服務器上運行,但無法在IIS 7.5本地主機上運行。問題仍未解決。

UPD2 TransferResult的這個answer contains a modified implementation與MVC3一起使用。原來它比以前更簡單。

+0

你有沒有解決這個問題? – 2011-09-27 22:38:15

+1

是的,這裏是工作解決方案:http://stackoverflow.com/questions/799511/how-to-simulate-server-transfer-in-asp-net-mvc/1242525#1242525 – Andy 2011-10-08 17:09:10

回答

0

就我個人而言,我認爲創建路線(必要時有路線約束(請參閱http://stephenwalther.com/blog/archive/2008/08/07/asp-net-mvc-tip-30-create-custom-route-constraints.aspx))比這種試圖執行不可見重定向的'hack'要好得多,以便請求由不同的控制器和動作處理通過路由指定

爲什麼你就不能使用路由

+1

我使用TransferResult來實現錯誤處理:正在處理當前頁面動作或視圖,如果發生什麼事情,則執行傳輸。 – Andy 2010-11-14 06:14:29

1

無法複製下面的作品MVC 3完全正常的RC(剃刀和的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

如果使用Visual Studio Devt Server進行調試,此代碼可正常工作。但是,我在本地IIS服務器上運行應用程序時遇到上述錯誤。我沒有機會在遠程服務器上測試應用程序,但我清楚地觀察到本地計算機上這兩種配置的行爲差異。 – Andy 2010-11-20 15:00:43