如何在RouteConfig文件中设置默认页面和URL

时间:2014-12-03 21:51:19

标签: c# asp.net-mvc-5

这是我第一次在MVC中开发并且已经暂时解决了这个问题。

我想做什么

我想让网址看起来像这样:

example.com/SiteName/Project/Index/3

而不是:

example.com/SiteName/Project?projectId=3

此外,我希望用户能够键入example.com/SiteName并查看example.com/SiteName/Home/Index,因为它是默认页面。

我拥有什么

我有一个页面主页,它显示了一个项目列表。通过单击其中一个项目,项目页面将显示所选项目的详细信息。

在我的RouteConfig.cs文件中,我有这个:

    routes.MapRoute(
        name: "Project",
        url: "{controller}/{action}/{proejctId}",
        defaults: new { controller = "Project", action = "Index", projectId = UrlParameter.Optional }
    );


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

问题

当我在routes.MapRoute文件中首先列出Project的{​​{1}}时,我会得到我想要的网址(RouteConfig.cs)。

但是,当我尝试example.com/SiteName/Project/Index/3时,它会在共享文件夹中显示example.com/SiteName模板。

我发现了一个SO问题,提到订单很重要。 但是,如果我切换订单,Error.cshtml会成功显示example.com/SiteName页面,但当我点击列表中的项目时,网址会更改为:example.com/SiteName/Home/Index

如何将默认页面设置为主页/索引,并将网址保持为example.com/SiteName/Project?projectId=3

1 个答案:

答案 0 :(得分:2)

将路线更改为

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

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