具有嵌套区域的ASP.NET MVC4应用程序

时间:2014-07-30 10:07:30

标签: c# asp.net asp.net-mvc asp.net-mvc-4 asp.net-mvc-areas

之前我在this文章中描述了一个可插入的mvc4应用程序,其中包含MVC4中的区域概念。我在部署这个应用程序时遇到了问题,我按照here所述解决了它。

现在我想更进一步。我想使用嵌套区域,即区域内的区域。 以下是我的项目结构:

enter image description here

这里MainProj是主要项目,而其他项目是区域。 现在,在 CRM 区域,我想添加区域" ManageAppointments" (这是嵌套区域)

我可以添加此子区域但在路由中遇到问题。视图引擎永远不会找到 ManageAppointments 区域中的视图。

我认为这个问题是因为,路由知道主项目中的区域,但它不知道区域内有区域。以更简单的方式,路由知道CRM区域,但它从不在CRM区域内搜索MangeAppointment区域,即它不知道CRM区域内还有另一个区域。

目前我在CRM和MangeAppointment的区域注册如下:

CRM:

public class CRMAreaRegistration : AreaRegistration
{
       public override string AreaName
       {
           get
           {
               return "CRM";
           }
       }

       public override void RegisterArea(AreaRegistrationContext context)
       {
           context.MapRoute(
               "CRM_default",
               "CRM/{controller}/{action}/{id}",
               new { action = "Index", id = UrlParameter.Optional },
               new string[] { "CRM.Controllers" }
           );
       }
 }

MangeAppointment:

public class MangeAppointmentAreaRegistration : AreaRegistration
{
          public override string AreaName
          {
              get
              {
                  return "MangeAppointment";
              }
          }

          public override void RegisterArea(AreaRegistrationContext context)
          {
              context.MapRoute(
                  "MangeAppointment_default",
                  "MangeAppointment/{controller}/{action}/{id}",
                  new { action = "Index", id = UrlParameter.Optional },
                  new string[] { "MangeAppointment.Controllers" }
              );
          }
 }

我认为 MangeAppointment 区域注册有问题。 提前谢谢。

1 个答案:

答案 0 :(得分:2)

只需更改您的MangeAppointment区域注册,如下所示:

public override string AreaName
{
     get
     {
         return "CRM/Areas/MangeAppointment";
     }
}

如果你只是回归" MangeAppointment"它将在主项目中搜索ManageAppointment,即它将搜索位置错误的位置 MainProj / Areas / MangeAppointment

但是当你返回CRM/Areas/MangeAppointment时,它会搜索到。{ location MainProj / Areas / CRM / Areas / MangeAppointment