【问题标题】:My Controller and Area Name is same, if i want to call Default Controller Method which has action same name of Controller Inside Area我的控制器和区域名称相同,如果我想调用默认控制器方法,它的动作与区域内控制器的名称相同
【发布时间】:2020-02-13 01:20:15
【问题描述】:

我创建了一个简单的 MVC 应用程序。

我有一个控制器,即 HelathController

在这个 HealthController 中,我有两种方法,即 IndexBodyMass

现在我创建了一个区域,即健康

在这个区域我有控制器,即 BodyMassController

这个 BodyMassController 有一个方法 Index

我没有更改任何路由文件。

下面是我的HelathController

 public class HealthController : Controller
 {
        public ActionResult Index()
        {
            return View();
        }
        // GET: Health
        public ActionResult BodyMass()
        {
            return View();
        }
  } 

这是我的 BodyMassController,它位于 Health 区域内。

  public class BodyMassController : Controller
  {
            // GET: Health/Health
            public ActionResult Index()
            {
                return Content("Hello " + text);
            }
   }

这是我的区域注册码。

  public override void RegisterArea(AreaRegistrationContext context) 
  {
            context.MapRoute(
                "Health_default",
                "Health/{controller}/{action}/{id}",
                new { action = "Index", id = UrlParameter.Optional }
            );
   }

全球.asax

protected void Application_Start()
{
     AreaRegistration.RegisterAllAreas();
     FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
     RouteConfig.RegisterRoutes(RouteTable.Routes);          
     BundleConfig.RegisterBundles(BundleTable.Bundles);
}

现在当我使用 Url /Health 它会自动调用 HelathController 的 Index 方法。

现在当我使用Url时Health/BodyMass它会在HelathController区域自动调用BodyMassController的Index方法。

如果我想调用 HelathController 的 BodyMass(),我需要做什么?

【问题讨论】:

  • 你这里有冲突,你需要解决它。我建议重命名一些东西。
  • 有没有其他办法解决?
  • 您使用的任何方法都将非常糟糕,请注意安全并重命名。
  • 试试这个:docs.microsoft.com/en-us/aspnet/mvc/overview/older-versions-1/… 但我也会建议 renamig 虽然你可以使用约束来实现你的目标,谢谢
  • 您有 2 个相同的 URL,这是(如前所述)冲突。用户并不关心后台发生了什么。如果您在/health/[whatever] 上有 2 个页面,则需要进行更改。例如,您可以重命名您的 AreaHealth 控制器,或者您可以将自定义路由应用于任何冲突的 URL,以使到达页面所需的 URL 不同。

标签: asp.net-mvc asp.net-mvc-routing


【解决方案1】:

需要在你的 RouteConfig.cs 文件中添加这个:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-14
    • 2011-02-08
    • 1970-01-01
    • 2012-08-21
    相关资源
    最近更新 更多