Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3 如何注册路由类型Admin/{controller}/{action}/{id}_Asp.net Mvc 3_Routing - Fatal编程技术网

Asp.net mvc 3 如何注册路由类型Admin/{controller}/{action}/{id}

Asp.net mvc 3 如何注册路由类型Admin/{controller}/{action}/{id},asp.net-mvc-3,routing,Asp.net Mvc 3,Routing,我为模块自动注册路由,并尝试为管理员注册路由。 模块注册工作罚款 public class ModulSetup : BaseModule { public override void Setup() { this.SetupViewEngine(); this.SetupControllers(); } public override void SetupRoutes(RouteCollection routes) {

我为模块自动注册路由,并尝试为管理员注册路由。 模块注册工作罚款

public class ModulSetup : BaseModule
{
    public override void Setup()
    {
        this.SetupViewEngine();
        this.SetupControllers();
    }

    public override void SetupRoutes(RouteCollection routes)
    {
        routes.MapRoute(
            "Default",
            string.Empty,
            new { controller = "Home", action = "Index" });
    }

    protected override void SetupViewEngine()
    {
        ViewEngines.Engines.Add(new CoreViewEngine());
    }

    protected override void SetupControllers()
    {
        ControllerBuilder.Current.DefaultNamespaces.Add("SGN.Core.Controllers");
    }
}
但对于管理员,我得到404

public class AdminSetup : BaseModule
{
    public override void Setup()
    {
        this.SetupViewEngine();
        this.SetupControllers();
    }

    public override void SetupRoutes(RouteCollection routes)
    {
        routes.MapRoute(
            "Admin",
            "Admin/{controller}/{action}/{id}",
            new { controller = "Site", action = "Index" });

    protected override void SetupViewEngine()
    {
        ViewEngines.Engines.Add(new AdminViewEngine());
    }

    protected override void SetupControllers()
    {
        ControllerBuilder.Current.DefaultNamespaces.Add("SGN.Core.Admin.Controllers");
    }
}
例如。我有一个班级网站

namespace SGN.Core.Admin.Controllers
{
using System.Web.Mvc;
using SGN.Framework.Controller;

public class SiteController : AdminController
{
    public ActionResult Index()
    {
        return this.View();
    }
}
}
当我尝试转到服务器返回404时:(

更新

我试着创造一个能给你写信的人

但是没有帮助

更新

我试着用这个网址工作。但这不好。和主人不工作

更新

我使用RouteDebugger签入我使用Area的其他项目。使用Area时添加了什么。我如何理解DataTokens添加了3个参数

Namespaces=SGN.Web.Areas.Admin.,area=Admin,UseNamespaceFallback=False*

我尝试添加这个参数

Namespaces=SGN.Core.Admin.,area=Admin,UseNamespaceFallback=False*

但是没有帮助

更新

我创建了类AreaWaReviewEngine如何在此处编写

我的班级登记

namespace SGN.Web.Admin
  {
using System.Web.Mvc;

public class AdminAreaRegistration : AreaRegistration
   {
    public override string AreaName
    {
        get
        {
            return "Admin";
        }
    }

    public override void RegisterArea(AreaRegistrationContext context)
    {
        context.MapRoute(
            "Admin_default",
            "Admin/{controller}/{action}/{id}",
            new {area="Admin", controller = "Site", action = "Index", id = UrlParameter.Optional }
        );
    }
}
}
并从AreaAwareViewEngine创建AdminViewEngine

namespace SGN.Core.Admin
{
using System.Web.Mvc;

using SGN.Framework;

public class AdminViewEngine : AreaAwareViewEngine
{
    public AdminViewEngine()
    {
        AreaMasterLocationFormats = new[] { "~/Admin/Views/Shared/admin.cshtml" };

        AreaPartialViewLocationFormats = new[] { "~/Admin/Views/{1}/Partials/{0}.cshtml", "~/Admin/Menu/{0}.cshtml" };

        AreaViewLocationFormats = new[] { "~/Admin/Views/{1}/{0}.cshtml", "~/Admin/Menu/{0}.cshtml" };

        ViewLocationFormats = AreaViewLocationFormats;
        PartialViewLocationFormats = AreaPartialViewLocationFormats;
        MasterLocationFormats = AreaMasterLocationFormats;
    }

    protected override IView CreatePartialView(ControllerContext controllerContext, string partialPath)
    {
        return new RazorView(controllerContext, partialPath, null, false, FileExtensions);
    }

    protected override IView CreateView(ControllerContext controllerContext, string viewPath, string masterPath)
    {
        if (string.IsNullOrEmpty(masterPath))
        {
            masterPath = AreaMasterLocationFormats[0];
        }
        var view = new RazorView(controllerContext, viewPath, masterPath, true, FileExtensions);
        return view;
    }
}
  }

如果我转到,则工作,如果我转到,则不工作。这可能是一个简单的订购问题。您的管理路线是否在核心路线之前添加?我相信它将采用第一个匹配路线,除非您的管理路线在其他路线之前添加,否则我怀疑其中一个路线匹配,并将其重定向到管理控制器(这是不存在的)。你可能想看看哈克的


还有,你有没有理由不使用内置区域功能?这似乎是一个完美的搭配。

这可能是一个简单的订购问题。你的管理路线是在核心路线之前添加的吗?我相信它将采用第一个匹配路线,除非你的管理路线是在其他路线之前添加的,否则我怀疑其中一个是ma它正在被重定向到一个管理控制器(不存在)。你可能想用Haack的


另外,您没有使用内置区域功能有什么原因吗?这似乎是一个完美的匹配。

首先,确保您的“管理员”路线在默认非管理员路线之前已映射。此外,我将您的管理员路线更改为:

routes.MapRoute(
        "Admin",
        "Admin/{controller}/{action}/{id}",
        new { controller = "Site", action = "Index", id = UrlParameter.Optional });

这样,
id
route参数的默认值为
UrlParameter。可选的
。您的初始路由没有
id
的默认值,因此需要它。

首先,确保您的“管理”路由在默认非管理路由之前映射。此外,我将您的管理路由更改为:

routes.MapRoute(
        "Admin",
        "Admin/{controller}/{action}/{id}",
        new { controller = "Site", action = "Index", id = UrlParameter.Optional });

这样,
id
route参数的默认值为
UrlParameter。可选的
。您的初始路由没有
id
的默认值,因此需要它。

RouteCollection中管理员的路由排名第二。我无法测试路由是否使用RouteDebugger。因为返回404,我没有使用区域,因为我不想使用文件夹区域Route for Admin在RouteCollection中排名第二。我无法测试路由使用RouteDebugger。因为返回404我没有使用区域,因为我不想使用文件夹area@Greg将此路由置于默认路由之前。RouteCollection中管理员的路由排名第二。第一个路由。IgnoreRoute(“{resource}.axd/{*pathInfo}”)@Greg将此路由置于默认路由之前。RouteCollection中管理员的路由排名第二。第一个路由。IgnoreRoute(“{resource}.axd/{*pathInfo}”);