2011-07-14 94 views
2

我想获得以下路线网址:ASP.NET MVC路由返回null

RouteTable.Routes.MapRoute(
    null, 
    "cinema", 
    new 
{ 
    Controller = "CinemaListings", 
    Action = "ShowCinemaLandingPage", 
    SiteArea = "CinemaTimes", 
    MainLandingPage = true 
}); 

我已尝试以下方法生产的网址:

<%:Url.Action("ShowCinemaLandingPage", "CinemaTimes", new { SiteArea = "CinemaTimes", MainLandingPage = true})%> 
<%:Url.RouteUrl(new { Controller = "CinemaTimes", Action = "ShowCinemaLandingPage", SiteArea = "CinemaTimes", MainLandingPage = true })%>  

我我也试过只用控制器和动作名称。我返回空 - 我错过了什么?

+0

What'type'是SiteArea?它是一个字符串参数吗?你能向我们展示控制器/动作与这个映射的参数吗? –

回答

3

不这项工作?

<%:Url.Action("ShowCinemaLandingPage", "CinemaListings", new { SiteArea = "CinemaTimes", MainLandingPage = true })%> 

这似乎从你的代码,你已经混了SiteAreaController值。因此,您不是在Url.Action中提供控制器名称,而是提供了SiteArea两次(作为第二个参数和附加路由值)。

+1

唉!我会给你一个测试回复你*走开踢自己* –

+0

是的,我的错。谢谢 :) –

-1

很难理解你的路线。首先,你还没有给出它的名字(通过null之前我曾经遇到过的问题),然后在那里没有占位符。

没有给它一个控制器,这是行不通的。

<%:Url.Action("ShowCinemaLandingPage", "CinemaTimes", new { SiteArea = "CinemaTimes", MainLandingPage = true})%> 

在这里您传递控制器名称,但由于没有控制器名称,所以没有路径匹配。

所以我会用 - 在最低限度 - 这一点:

RouteTable.Routes.MapRoute(
    "GiveMeSomeNameWillYa?", 
    "{Controller}/{Action}", 
    new 
{ 
    Controller = "CinemaListings", 
    Action = "ShowCinemaLandingPage", 
    SiteArea = "CinemaTimes", 
    MainLandingPage = true 
}); 
+0

该路由对传入请求有效。任何请求/电影将由'CinemaListings'控制器上的'ShowCinemaLandingPage'处理。我需要保持这种行为。我尝试添加路线名称,但这没有效果。 –

+0

-1路由名称是完全可选的。 URL模板不需要控制器和操作标记,如果这些标记提供了默认值。 –