【问题标题】:ASP.NET MVC routing returning nullASP.NET MVC 路由返回 null
【发布时间】:2011-07-15 00:25:04
【问题描述】:

我正在尝试获取以下路由的 URL:

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

我尝试了以下方法来生成 URL:

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

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

【问题讨论】:

  • SiteArea 是什么“类型”?它是一个字符串参数吗?你能告诉我们这个映射到的带有参数的控制器/动作吗?

标签: c# asp.net-mvc routing


【解决方案1】:

这不行吗?

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

从您的代码看来,您将SiteAreaController 值混淆了。因此,您没有在Url.Action 中提供控制器名称,而是提供了两次SiteArea(作为第二个参数和附加路由值)。

【讨论】:

  • 啊!我会给你一个测试,然后回复你自己踢自己走
【解决方案2】:

很难理解您的路线。首先,你没有给它命名(传递我在引起问题之前经历过的 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
});

【讨论】:

  • 该路由确实适用于传入请求。对 /cinema 的任何请求都将由 CinemaListings 控制器上的 ShowCinemaLandingPage 处理。我需要保持这种行为。我试过添加路由名称,但这没有效果。
  • -1 路由名称是完全可选的。如果提供了默认值,则 URL 模板不需要控制器和操作令牌。
猜你喜欢
  • 2015-05-02
  • 2020-02-01
  • 1970-01-01
  • 2010-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多