0

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

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,我该怎么做?

4

2 回答 2

0

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

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" });


    }

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

确定它是否是命名空间问题或没有在新控制器(该区域中的那个)索引方法上放置一个断点,并查看它是否在您访问页面时被命中。

希望这可以帮助

于 2013-09-09T10:30:43.613 回答
0

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

基本上它会在几个地方寻找控制器和视图,使用 glimpse 会很明显:)

在您的 Xahoi 地区,您实际上是否有一个属于 Home 的名为 index 的视图?例如 Areas\Xahoi\Views\Home\Index.cshtml

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

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

    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" });


}
于 2013-09-09T11:01:13.680 回答