AreaRegistration在MVC Razor中不起作用

时间:2013-09-04 04:30:09

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

我在我的网站中添加了一个名为blogging的区域,我创建了所有的东西,我只是尝试通过手动输入Url在浏览器中访问它,但我收到的错误如“/'应用程序中的服务器错误”。我附上了项目的代码和快照。 任何帮助,将不胜感激。

Global.asax中

public static void MyCustomRouting(RouteCollection coll)
{
    coll.IgnoreRoute("{resource}.axd/{*pathInfo}");
    coll.MapRoute("Default", "{controller}/{action}", new { controller = "Home", action = "Index" }, new[] { "Areas.Controllers" });
}

protected void Application_Start()
{
    //RouteDebug.RouteDebugger.RewriteRoutesForTesting(RouteTable.Routes);
    AreaRegistration.RegisterAllAreas();
    RegisterGlobalFilters(GlobalFilters.Filters);
    MyCustomRouting(RouteTable.Routes);
}

BloggingAreaRegistration.cs

using System.Web.Mvc;

namespace MVC_PageRouting.Areas.Blogging
{
    public class BloggingAreaRegistration : AreaRegistration
    {
        public override string AreaName
        {
            get { return "Blogging"; }
        }

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

文件夹结构:

Architecture

错误:

Browser Error

3 个答案:

答案 0 :(得分:2)

通过在UrlParameter.Optional前面添加“id =”来指定您的id参数是可选的

new {action="Index", id = UrlParameter.Optional }

答案 1 :(得分:1)

我敢打赌如果去了这个网址它会起作用:

http://localhost:51803/Blogging/BloggingHome/Index/0

原因是您错误地指定了MapRoute参数。你指定了这个:

new {action="Index", UrlParameter.Optional });

您忘记包含ID名称,因此MVC不知道您的意思。你想要这个:

new {action="Index", id=UrlParameter.Optional });

注意“id =”,这告诉MVC id是可选的。没有它,MVC不知道你的意思是UrlParameter.Optional,因此它需要id。由于您没有在网址中包含ID,因此未选择任何路由,因此发布了404。

答案 2 :(得分:0)

您可以更新您的区域注册并尝试吗?

context.MapRoute("Blogging_default", "Blogging/{controller}/{action}/{id}", new {controller = "BloggingHome",action="Index",UrlParameter.Optional });