2012-02-12 111 views
-1

如波紋管對自定義路由在MVC剃刀URlHelper.Action路徑問題

應用程序名稱是ValidationTest,我也改變了我的默認綁定到下面我定製我的應用程序的路由。 這工作正常,但我在控制器類中有一些操作,並且我確實使用urlHelper來標識操作路徑和控制器路徑您可以在底部代碼中看到,但是在更改默認路由後,它會引發異常閱讀從網址助手作用,我是新來的MVC所以請建議我如何給路徑控制器和動作

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
    routes.MapRoute(
     "MyRout",// Route name 
     "RubinsApp/{CRM}/{id}",// URL with parameters 
     new { 
      controller = "Render", 
      action = "RenderApp", 
      id = UrlParameter.Optional 
     } // Parameter defaults 
    ); 
} 

所以我的網址是

http://localhost/ValidationTest/RubinsApp/crm/test 

所以

ValidationTest=Application Name 
RubinsApp/CRM =Routing Para 
test=id 

並能正常工作 我的問題是,我有一個Ajax動作呼叫如果操作URL在CSHTML定義如下婁

UrlHelper urm = new UrlHelper(Request.RequestContext); 
var urlsMenu = urm.Action("BuildNavigationMenu", "Render").ToString(); //This Thorws Object null Error 

這裏

BuildNavigationMenu=Action Name 
Render= Controller 
+1

差格式...! – gdoron 2012-02-12 11:16:02

+0

感謝您的答案:) – 2012-02-12 16:40:03

回答

0

在您的自定義路線,你已刪除{action}標記意味着您不能再指定除默認值RenderApp定義的其他任何操作。這就是爲什麼urlHelper.Action方法返回null。

您已經定義了路線的方式,在此應用程序中,您只能在單個控制器(Render)上執行單個動作(RenderApp)。在您的urlHelper.Action調用中,您試圖調用BuildNavigationMenu操作,但顯然這是不可能的,因爲無法實現此操作。

所以你將不得不修改你的"RubinsApp/{CRM}/{id}"路線,以包括至少{action}令牌的地方。或者在其後添加另一個路由定義。

只是關於你的代碼的附註。如果你在控制器動作中寫這個,你不需要實例化一個新的UrlHelper。控制器類已具有Url屬性:

public ActionResult Foo() 
{ 
    var urlsMenu = Url.Action("BuildNavigationMenu", "Render"); 
    ... 
} 
+0

我添加了MVC的默認操作,以便工作,謝謝 – 2012-02-20 12:30:13