为什么默认控制器和操作在URI处不可见?

时间:2013-10-25 09:14:39

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

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

让我们说我的路线是:

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

Everething工作正常,但在我的URI中,我只能看到:

http://localhost:25346/

我希望看到完整的路径,就像那样:

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

2 个答案:

答案 0 :(得分:1)

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

url/dummycontroller/dummyaction

如果你有一个调用者Dummy的控制器,并且它有一个动作DummyAction,那么这将映射 - 否则失败。如果你只是放入URL,那么就没有ControllerAction来查找,因此,它会使用默认值Home/Index

如果您想添加新路线,可以这样做,但请记住添加更具体的路线before作为默认路线。

答案 1 :(得分: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,以便您可以在你的观点。