Asp.net mvc MVC 3-新区域-404错误-未找到资源-已尝试路由调试器
我有一个小的MVC 3应用程序-一个演示场地位。 我有一个领域,它一直运作良好 我刚刚添加了另一个区域,希望能够启动应用程序,但没有,404,找不到资源 AreaRegistration中的地图路线是默认的(与我创建的第一个区域一样) 我尝试过在这个系统中添加一个特定的控制器,但什么都没有 所以我下载了Phil Haack的RouteDebugger,我的路线是在输入时找到的(这也是我想要得到的) 该地区的结构 我的控制器Asp.net mvc MVC 3-新区域-404错误-未找到资源-已尝试路由调试器,asp.net-mvc,model-view-controller,routing,http-status-code-404,asp.net-mvc-3,Asp.net Mvc,Model View Controller,Routing,Http Status Code 404,Asp.net Mvc 3,我有一个小的MVC 3应用程序-一个演示场地位。 我有一个领域,它一直运作良好 我刚刚添加了另一个区域,希望能够启动应用程序,但没有,404,找不到资源 AreaRegistration中的地图路线是默认的(与我创建的第一个区域一样) 我尝试过在这个系统中添加一个特定的控制器,但什么都没有 所以我下载了Phil Haack的RouteDebugger,我的路线是在输入时找到的(这也是我想要得到的) 该地区的结构 我的控制器 public class CreateController :
public class CreateController : Controller
{
private ILogger Logger { get; set; }
private ICardSender Emailer { get; set; }
private IOCCardRepository CardRepository { get; set; }
public CreateController(ILogger logger, ICardSender cardSender, IOCCardRepository repository)
{
this.Logger = logger;
this.Emailer = cardSender;
this.CardRepository = repository;
}
//
// GET: /Postcard/Create/
public ActionResult Index()
{
var model = new OCPostcardModel().Create();
return View(model);
}
现在:我已经删除了整个区域,再试了一次,但没有成功。因此,我在路由中添加了特定控制器(区域内注册文件)
我不知道为什么我以前这么做的时候它不起作用,但现在它起作用了
仍然很奇怪,因为我在我看过的任何演示中都没有看到有人将此控制器添加到路由中,而我的其他区域中也没有此控制器?您的maproute中缺少控制器部分我在将控制器移动到某个区域时遇到了此问题,但忘记了更新名称空间。控制器名称的作用域为区域的命名空间。因此,“区域”中的“某些”将映射到App.Area.Area.Controllers.SomeController,但它不存在。尝试在“明信片区域”下添加一个类“明信片区域注册”
using System.Web.Mvc;
namespace Areas.PostCard
{
public class PostCardAreaRegistration: AreaRegistration
{
public override string AreaName
{
get
{
return "PostCard";
}
}
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"PostCard_default",
"PostCard/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional }
);
}
}
}
值得一提的是,这是一款MVC Preview 1应用程序,我已经通过平台安装程序安装了MVC Preview 2 1更多!我在明信片区域Registration中的RegisterArea方法上设置了一个断点,该方法被命中。我还在控制器的构造函数(和索引操作)上设置了一个断点,两者都未命中?请提供更多信息。控制器看起来像什么?+1,如果您实现了区域,您应该返回并更新所有路由,以包括您希望路由隔离到的名称空间。如果在根目录和区域中都有相同名称的控制器(如“Home”),这将导致问题。在我的情况下,解决方案与此处建议的类似:我复制/粘贴了AreaRegistration,但也忘记了更新命名空间。
context.MapRoute(
"Postcard_default",
"Postcard/{controller}/{action}/{id}",
new { controller = "Create", action = "Index", id = UrlParameter.Optional }
);
using System.Web.Mvc;
namespace Areas.PostCard
{
public class PostCardAreaRegistration: AreaRegistration
{
public override string AreaName
{
get
{
return "PostCard";
}
}
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"PostCard_default",
"PostCard/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional }
);
}
}
}