【问题标题】:MVC3 - How do I route to a subsite?MVC3 - 我如何路由到子站点?
【发布时间】:2011-10-07 15:00:38
【问题描述】:

我的主站点中有一个用于站点管理的子站点。网站物理存储在表单中

~/Views/Administration/ViewName/Index

内部有控制器

~/Controllers/Admin/ControllerName

我在尝试访问该页面时遇到异常。

未找到视图“索引”或其主视图或没有视图引擎 支持搜索的位置。以下位置是 搜索到:~/Views/ViewName/index.aspx ~/Views/ViewName/index.ascx ~/Views/Shared/index.aspx ~/Views/Shared/index.ascx ~/Views/ViewName/index.cshtml ~/Views/ViewName/index.vbhtml ~/Views/Shared/index.cshtml ~/Views/Shared/index.vbhtml

我添加了一条路线

        routes.MapRoute(
                "Administration", // Route name
                "Administration/{controller}/{action}/{id}", // URL with parameters
                new { controller = "Administration", action = "Index", id = UrlParameter.Optional } // Parameter defaults
        );

手动直接进入页面

http://localhost:999/Administration/BaseItem/index

不会导致异常,但我没有得到任何内容。这让我相信它没有找到视图。我做错了什么?


我认为问题在于我已经告诉路由引擎如何路由到 Controller,但我没有告诉系统如何路由到 View。我在哪里告诉系统视图在哪里?

【问题讨论】:

  • 那 maproute 是 global.asax 中的第一个还是你把它放在默认之后? (如果是这样,默认值可能首先匹配...)
  • @Timbo 紧随其后。我改成以前的了。我仍然得到一个空白屏幕,但我没有看到任何错误。
  • 酷,是的,在此之前默认匹配它。您必须按照最具体到最不具体的方式订购配置。我认为空白屏幕听起来像是一个单独的问题。
  • @Timbo - 抱歉,实际上错误仍然存​​在。他们只是晚点出现在我的电子邮件中(我在 global.asax 中捕获并丢弃电子邮件)。
  • 它看起来像是将“ViewName”视为控制器,因此感觉这是一个路由问题。在 /Administration/BaseItem/Index url 中,如果路由图正确,您应该解析一个名为 BaseItem 的控制器和一个名为 Index 的视图,该视图位于 ~/Views/BaseItem/Index 中。这是您的控制器/视图的正确结构吗?

标签: asp.net-mvc-3


【解决方案1】:

问题不在于路线,而在于设计。视图引擎找不到您的视图,因为它找不到正确的路径,因为默认的视图引擎不是为搜索子站点而设计的。

不要创建子网站,而是在您的项目中将 Administration 设为 Area。在AdministrationAreaRegistration.cs 中,您将设置一条类似于您添加的路线的路线。将您的视图放在 Administration 文件夹内的 Views 文件夹中(在 Area 文件夹内),一切都会正常工作。

【讨论】:

  • 嗯。是的,这就是我想要做的,从概念上讲。不过,添加它确实改变了我对整个设计的看法。我担心我需要在主站点和区域站点中复制我的模型。
  • 由于一个区域是同一个项目的一部分,它将具有与区域文件夹之外的控制器和视图相同的所有命名空间。我看不出任何需要复制模型的原因。
  • 好的,我看到该项目添加了自己的一组 Controller/model/view 文件夹和一个 web.config。我只是假设它不会再看到“主要项目”中的那些。我的立场是正确的。
  • 只是对任何进行此转换的人的一个小提示。区域由命名空间驱动。如果您有现有的控制器并将它们移动到区域中......您需要手动更新命名空间以使其工作。命名空间的格式为Project.Areas.AreaName.Controllers。或者,只需临时添加一个新控制器,然后将命名空间复制/粘贴到现有控制器上。
猜你喜欢
  • 2012-06-16
  • 2017-01-05
  • 2012-06-24
  • 2011-10-20
  • 1970-01-01
  • 1970-01-01
  • 2019-02-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多