我有一个包含2个不同区域的asp.net mvc项目。
以下是我在RouteConfig.cs中的代码。
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
namespaces:new[]{"Sample1.Controllers"}
);
当我运行它时,我希望将Sample1视为默认项目,反之亦然。但它给了我一个我在下面指定的错误。
Multiple types were found that match the controller named 'Home'. This can happen if the route that services this request ('{controller}/{action}/{id}') does not specify namespaces to search for a controller that matches the request. If this is the case, register this route by calling an overload of the 'MapRoute' method that takes a 'namespaces' parameter.The request for 'Home' has found the following matching controllers:AreaSample.Areas.Sample1.Controllers.HomeController AreaSample.Areas.Sample2.Controllers.HomeController
我指定的命名空间不起作用。 Sample1AreaRegistration.cs也是这样的。
context.MapRoute(
"Sample1_default",
"Sample1/{controller}/{action}/{id}",
new { controller="Home", action = "Index", id = UrlParameter.Optional }
);
我该如何解决这个问题?
答案 0 :(得分:0)
您不应为默认路由提供区域特定的命名空间。而不是在RouteConfig.cs文件中使用Sample1.Controllers,而是将其更改为AreaSample.Controllers。并在每个AreaRegistration文件中添加名称空间。
为了使Sample1成为默认区域,我假设它是一个单独的项目。所以尝试将其添加到配置管理器中。从解决方案配置中选择Sample1项目并运行该应用程序。
或者,尝试在项目属性中添加特定页面作为默认值。右键单击项目>>性状>>网络与GT;取代。选择“特定页面”选项,然后键入Areaname / ControllerName / ActionName
答案 1 :(得分:0)
最好的解决方案是不要将Sample1作为单独的区域。但是Sample1是项目的根控制器/视图(如默认模板)。
但是,如果你想拥有这样的2个区域,那么你可能会做这样的事情:
请在AreaRegistration类中指定名称空间。
不要在RouteConfig.cs类中指定名称空间。
在RouteConfig.cs中,您还应提供默认区域值。
routes.MapRoute(
name: "Root",
url: "",
defaults: new { area = "Sample1", controller = "Home", action = "Index" }
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);