【问题标题】:Why default controller and action aren't visible at URI?为什么默认控制器和操作在 URI 中不可见?
【发布时间】:2013-11-04 07:56:49
【问题描述】:

当我们第一次运行 ASP.NET MVC 应用程序时,我们无法在 URI 中看到默认路由。我的意思是,实际上我们将采取适当的行动,并且视图渲染得很好。但我在我的 URI 上看不到控制器,也看不到操作。

假设我的路线是:

routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", 
            action = "Index", id = UrlParameter.Optional });

一切正常,但在我的 URI 中我只能看到:

http://localhost:25346/

我想看看完整的路径,像这样:

http://localhost:25346/Home/Index/

【问题讨论】:

  • 这就是默认路由的重点。如果不存在这样的东西,当您导航到 http://localhost:25346/ 时,MVC 将如何确定要显示的内容?
  • 在我的默认路由中,我有一些值,例如:localhost:25346/Home/Index/2013/9/1,我希望能够使用以下内容在我的视图中获取这些值:ViewContext.RequestContext.RouteData.Values["Year"]

标签: asp.net asp.net-mvc asp.net-mvc-4 routes


【解决方案1】:

您的想法太难了,让 MVC 使用它的“魔力”为您完成工作。根据您的评论,您可能想要这样的路线:

routes.MapRoute(
    name: "IndexWithDate",
    url: "Home/Index/{year}/{month}/{day}",
    defaults: new { controller = "Home", action = "Index" });

现在在您的 HomeController 中创建一个操作:

public ActionResult Index(int year, int month, int day)
{
    ViewBag.Year = year;
    ViewBag.Month = month;
    ViewBag.Day = day;

    return View();      
}

现在使用localhost:25346/Home/Index/2013/9/1 之类的网址,您在操作中的参数将被填充。 year = 2013、month = 9 和 day = 1。您可以将这些值放在 ViewBag(见上文)中,或者创建一个 ViewModel,以便在您的视图中使用它们。

【讨论】:

    【解决方案2】:

    当网站加载时,它会查看 url,并尝试使用路由引擎匹配传入的 url。

    url/dummycontroller/dummyaction
    

    如果你有一个控制器是调用者Dummy,并且它有一个动作DummyAction,那么这将映射 - 否则失败。如果您只输入URL,则没有ControllerAction 可供查找,因此,它使用默认值,在您的情况下为Home/Index

    如果你想添加一个新的路由,你可以这样做,但记得添加更具体的路由before默认。

    【讨论】:

      猜你喜欢
      • 2016-04-03
      • 1970-01-01
      • 1970-01-01
      • 2019-01-31
      • 1970-01-01
      • 2013-06-01
      • 1970-01-01
      • 2016-02-13
      • 1970-01-01
      相关资源
      最近更新 更多