从指定区域运行asp.net mvc项目

时间:2014-02-10 12:10:13

标签: asp.net asp.net-mvc

我有一个包含2个不同区域的asp.net mvc项目。

enter image description here

以下是我在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 }
        );

我该如何解决这个问题?

2 个答案:

答案 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 }
    );