2017-01-29 64 views
0

我建立了多个组织的一个网站。例如,用户可以访问mydomain.com/org1/home/index或mydomain.com/org2/home/index。asp.net的MVC路由,以区为参数

我所试图做的是有以下路由,

mydomain.com/{area}/{controller}/{action}/{id}

我无法弄清楚如何做到这一点,并坦率地甚至不知道如何甚至开始建立我的路由。我希望能够访问{}面积字符串,以决定显示哪些图像,什么文本等

我希望我做的意义有什么,我试图做的。

回答

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

你的家控制器将是这个样子:

public ActionResult Index(string area, string id) 
+0

非常感谢的快速反应!这绝对可以解决这个问题。现在我面对另一种情况,因为情况并非总是如此,即具有{区域}参数。所以现在,当我去/帐户/登录它会给出错误。如果我之前添加一个字符串:/ foo/Account/Login,它会将我带到登录页面。 我意识到这是一个问题。我所做的是我用你给我的路线作为第一个“customRoute”,然后在那之后声明默认路线。 你知道如何解决这个问题?或者我应该发布另一个问题? – joks

+0

您可以添加'routes.MapRoute( 名称: “帐户”, 网址: “{控制器}/{行动}/{ID}” 默认:新{ 控制器= “账户”, 行动= “登陆” , id = UrlParameter.Optional );'就在“默认”路线向上顶部 – JohanP

+0

所以现在我有两条路线,“默认”和“帐户”。如果“帐户”路线向上顶,我不能够访问mydomain.com/foo/home/index即使HomeController中有指数(串区域),它只是给我一个错误。如果我将“Default”放在最上面,我可以访问mydomain.com/foo/home/index,效果很好,但我也可以访问其他我不想要的控制器/操作。例如,我有一个带有ActionResult Index()的DivisionsController。现在我可以调用mydomain.com/foo/divisions/index,并返回与编写mydomain.com/divisions/index相同的页面。我不想说...... – joks