asp.net MVC 中的地区

本文关键字:地区 MVC net asp | 更新日期: 2023-09-27 18:30:42

我在根区域有一个主页路由:

routes.MapLocalizedRoute("HomePage",
                            "",
                            new { controller = "Home", action = "Index" },
                            new[] { "Nop.Web.Controllers" });

还有一个叫Xahoi的地区

    namespace Nop.Web.Areas.Xahoi
{
    public class XahoiAreaRegistration : AreaRegistration
    {
        public override string AreaName
        {
            get
            {
                return "Xahoi";
            }
        }
        public override void RegisterArea(AreaRegistrationContext context)
        {
            context.MapRoute(
            "Xahoi_default",
            "Xahoi/{controller}/{action}/{id}",
            new { action = "Index", id = UrlParameter.Optional },
            new[] { "Nop.Web.Areas.Xahoi.Controllers" });

        }
    }
}

当我调用 http://domain.com/xahoi/home ->时,它确实进入了Xahoi区域的家庭控制器,但随后它从根中的主控制器运行索引视图。

另外,假设我想将调用更改为仅 http://domain.com/xa-hoi,我该怎么做?

asp.net MVC 中的地区

首先,我建议安装 Glimpse 以更好地了解 MVC 如何在"幕后"工作

基本上,它将在几个地方查找控制器和视图,使用瞥见将使这个明显:)

在你的Xahoi区域中,你真的有一个名为index的视图属于Home吗?例如Areas''Xahoi''Views''Home''Index.cshtml

否则,您可以在MapRoute中指定Area属性,尽管我认为这是默认情况下所做的。以下映射还应将您的 url 更改为您询问的内容

公共覆盖 void 注册区域(区域注册上下文上下文) {

    context.MapRoute(
    "Xahoi_default",
    "xa-hoi/{controller}/{action}/{id}",
    new { Area=AreaName controller = "Home", action = "Index", id = UrlParameter.Optional },
    new[] { "Nop.Web.Areas.Xahoi.Controllers" });

}

要指定默认控制器,只需将其添加到第三个参数的数组中:

public override void RegisterArea(AreaRegistrationContext context)
    {
        context.MapRoute(
        "Xahoi_default",
        "Xahoi/{controller}/{action}/{id}",
        new { controller = "Home", action = "Index", id = UrlParameter.Optional },
        new[] { "Nop.Web.Areas.Xahoi.Controllers" });

    }

它显示错误视图的问题可能是第四个参数上的命名空间问题,并且它在错误的控制器中运行代码......或者视图文件夹结构的结构使其无法在"区域''Xahoi''视图''主"文件夹中找到视图,而是使用根视图文件夹中的索引视图。也许您在"视图"文件夹中有一个索引视图,而不是在"视图''主"文件夹中?

若要确定这是否是命名空间问题,请在新控制器(区域中的控制器)上放置断点 Index 方法,并查看访问页面时是否命中它。

希望这有帮助