【问题标题】:Adding area to mvc project将区域添加到 mvc 项目
【发布时间】:2013-08-19 11:20:49
【问题描述】:

我有一个 mvc 项目,我添加了一个名为 BEK 的新区域 并创建了 BEKAreaRegistration.cs。

public class BEKAreaRegistration : AreaRegistration
{
    public override string AreaName
    {
        get
        {
            return "BEK";
        }
    }

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

而我的 global.asax 文件如下:

    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas(); 

        RouteTable.Routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        RouteTable.Routes.IgnoreRoute("{*allAspx}", new { allAspx = @".*\.aspx(/.*)?" });
        RouteTable.Routes.IgnoreRoute("{*allAsmx}", new { allAsmx = @".*\.asmx(/.*)?" });
        RouteTable.Routes.IgnoreRoute("{*allAshx}", new { allAshx = @".*\.ashx(/.*)?" });
        RouteTable.Routes.IgnoreRoute("Services/{*pathInfo}");
        RouteTable.Routes.IgnoreRoute("");

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

但是当我尝试转到 BEK/Home/Index 页面时,我得到一个错误页面。我还应该做什么?

这是错误:

找不到资源。说明:HTTP 404。资源 您正在寻找(或其依赖项之一)可能是 已删除、更改名称或暂时不可用。请 查看以下 URL 并确保其拼写正确。

请求的网址:/LMS_WEB_APP/BEK/Home

----------------------------------- --------------------------------- 版本信息:Microsoft .NET Framework 版本:4.0.30319; ASP.NET 版本:4.0.30319.18213

【问题讨论】:

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


    【解决方案1】:

    当您添加 BEK 区域时。 MVC 将为您创建这些。

    Mvc 不会创建任何控制器、动作和视图。

    因此,您必须手动添加要添加的控制器、操作和视图。

    所以,现在您必须通过右键单击控制器并添加控制器来添加控制器。

    添加控制器后。

    您可以像这样右键单击操作并添加视图以添加视图:

    好的.... 因此,您确实需要 Controller 和 Action 和 Views。

    现在您可能需要解决我之前告诉过您的控制器重复问题(如果有的话)。

    快乐的编码...

    【讨论】:

      【解决方案2】:

      我认为问题在于,您在 Area 和应用程序中都有 Same Name 控制器。就像您在普通应用程序和 AREA 中有 Home Controller 并且,它导致了同一控制器的重复声明。

      这样做的方法是,指定控制器的NAMESPACE,如下所示:

      public override void RegisterArea(AreaRegistrationContext context)
      {
          context.MapRoute(
          "BEK_default",
          "BEK/{controller}/{action}/{id}",
          new { action = "Index", id = UrlParameter.Optional }, 
          new string[] { "MyAppName.Areas.BEK.Controllers" }  // specify the new namespace
      );
      }
      

      如果不是这种情况,请发布您收到的错误消息。

      【讨论】:

      • 当我在这一行设置断点时它永远不会命中那是问题不是这个
      • 抱歉粘贴不好
      • 是的,我没有做任何额外的事情。只需右键单击项目-> 添加区域即可添加区域。它添加了家庭控制器和带有文件夹的视图
      • 而且我的应用程序中没有主视图文件夹或控制器。我的区域只有主文件夹
      • 好的。所以你有那个控制器。然后,您如何从您的应用程序中调用该区域。你能告诉我你的@html.actionLink() 部分吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-26
      • 1970-01-01
      • 2015-01-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多