【问题标题】:ASP.NET MVC two controllers with same name, how to specify view locationASP.NET MVC 两个同名控制器,如何指定视图位置
【发布时间】:2017-01-29 06:41:18
【问题描述】:

我在不同的命名空间中有两个同名的控制器

-Controllers
--AdminCp
---AccountController.cs
--Cp
---AccountrController.cs

和相同的视图位置结构

-Views
--AdminCp
---Account
----Login.cshtml
--Cp
---Account
----Login.cshtml

我的帐户控制器包含方法登录

public ActionResult Login()
{
    return View();
}

我也有自定义RazorViewEngine

public ExtendedRazorViewEngine()
{
    ViewLocationFormats = new[]
    {
        "~/Views/AdminCp/{1}/{0}.cshtml",
        "~/Views/Cp/{1}/{0}.cshtml",
        "~/Views/{1}/{0}.cshtml",
        "~/Views/Layout/{0}.cshtml",
    };
}

我的路由使用MvcCodeRouting

routes.MapCodeRoutes(typeof (Controllers.HomeController));

但是当我在Cp namespace 中尝试到动作Login 时,我正在从AdminCp namesapce 获得视图

http://example.com/cp/account/login ---> /views/admincp/account/login.cshtml

我知道我可以通过View() 中的路径定位但是...看起来很难看。

有人可以帮我解决这个问题吗?提前致谢!

【问题讨论】:

  • 我看到您创建了两个文件夹:AdminCpCp。但是 MVC 为此目的内置了功能:Areas。通过使用 Areas MVC 为您整理出这些类型的东西
  • 谢谢,我试试

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


【解决方案1】:

你需要有区域来实现这样的功能。一个好的开始链接是:

Areas

另外,您需要更改您的 RouteConfig:

context.MapRoute(
    "Default",
    "{area}/{controller}/{action}/{id}",
    new { area = "MyOneWay", controller = "Home", action = "Index", id = UrlParameter.Optional }
);

此外,您可以通过以下定义的方式拥有您的控制器:

namespace MyApp.Areas.MyOneWay.Controllers
{
    public class HomeController : Controller
    {
        ...
    }
}

namespace MyApp.Areas.MySecondWay.Controllers
{
    public class HomeController : Controller
    {
        ...
    }
}

【讨论】:

  • 但我认为使用 MvcCodeRouting 我不会注意创建区域
  • ohhh..didnt 检查你是否使用过 MvcCodeRouting。我对 MvcCodeRouting 的工作并不多,让我们等待其他专家。
  • 我认为创建项目的副本并会尝试用区域重新实现结构。感谢您的帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多