2011-09-21 79 views
12

我有一個項目,我最近升級到ASP.NET MVC 3.在我的本地機器上,一切正常。當我部署到服務器時,每次使用RedirectToAction調用時都會發生錯誤。它會拋出System.InvalidOperationException並顯示錯誤消息路由表中沒有路由與提供的值匹配。我的假設是服務器上有一些配置問題,但我似乎無法弄清楚。RedirectToAction在ASP.NET MVC 3中導致「路由表中沒有路由匹配提供的值」

+1

這意味着你重定向到不匹配路由表中的任何路由,請檢查'global.asax'文件中的路由表。我是你添加的參數沒有在路由中聲明 –

+0

請提供關於失敗的'RedirectToAction'的更多細節。另外,請提供路線。 – counsellorben

回答

3

我和RedirectToAction曾經有過類似的問題,發現你需要註冊的有效路由導致這個動作。

+4

它確實是與路線有關的東西。它在MVC2中工作正常,但我不得不添加一個額外的路由與一個較少的可選參數,使其與MVC3工作。 – Schmalls

0

有尾隨的路線斜線不與MVC 3.0工作的差異。 MVC 2.0對他們沒有任何問題。即,如果你改變了以下內容:

"{controller}.mvc/{action}/{id}/" 

到:

"{controller}.mvc/{action}/{id}" 

應該解決這個問題(從this thread,工作對我來說)。即使你使用升級嚮導移動到MVC 3.0,這仍然會拋出InvalidOperationException。我不知道這是不是Schmalls正在談論。

18

我在區域內重定向時遇到了MVC3中的區域。正如其他人所說,Glimpse在這裏非常有用。

我的解決辦法是在路線內的區域將值傳遞參數變化:

return RedirectToAction("ActionName", "ControllerName"); 

到:

return RedirectToAction("ActionName", "ControllerName", new { area = "AreaName" }); 
+0

這是真正的答案......我使用AttributeRouting處理了這個問題,即使它在其他頁面上工作而無需指定區域名稱,但我必須爲此特定區域執行此操作。 – jspinella

0

你可以添加一個路由表到您的RouteConfig.cs文件中像如下:

public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.MapMvcAttributeRoutes(); 

     var namespaces = new[] { typeof(HomeController).Namespace }; 

     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.MapRoute("name", "url", new { controller = "controllerName", action = "actionName" }, namespaces); 
    } 

注意:「url」就是你要在地址欄中輸入的內容吧:localhost:/ home

建立路線後,請使用RedirectToRoute("url")

或者如果你更喜歡RedirectToAction()那麼你不需要設置上述路線,使用默認值。 RedirectToAction(string action name, string controller name);

我希望這會有所幫助。

相關問題