1

我使用 ASP.NET MVC3 框架创建了一个 Web 应用程序。在项目中,我使用 HomeController 和 Index 操作添加了名为 Administrator 的新区域。

它与 http://localhost:2813/Administrator/Home/Index

但是当我尝试使用 URL 访问时 http://localhost:2813/Home/Index

我收到一条错误消息:

“/”应用程序中的服务器错误。

未找到视图“索引”或其主视图,或者没有视图引擎支持搜索的 > > > 位置。搜索了以下位置:~/Views/Home/Index.aspx ~/Views/Home/Index.ascx ~/Views/Shared/Index.aspx ~/Views/Shared/Index.ascx ~/Views/Home/Index。 cshtml ~/Views/Home/Index.vbhtml ~/Views/Shared/Index.cshtml ~/Views/Shared/Index.vbhtml

说明:当前web>>>请求执行过程中发生了未处理的异常。请查看堆栈跟踪以获取有关错误的更多信息以及它 > 源自代码的位置。

我还在 maproute 中添加了命名空间,但它仍然无法正常工作。有人有想法吗?谢谢。

更新问题:

这是 Global.ascx 中的 MapRoute routes.MapRoute( "Default", "{controller}/{action}/{id}", new { controller = "Default", action = "Index", id = UrlParameter.Optional }, new[] { "SampleWebsite.Controllers" } );

这是 AdministratorAreaRegistration.ascx context.MapRoute( "Administrator", "Administrator/{controller}/{action}/{id}", new { area = "Administrator", controller = "Dashboard", action = "Index", id = UrlParameter.Optional }, new[] { "SampleWebsite.Areas.Administrator.Controllers" } );

编辑
如果我将 MapRoute 从 Global 移动到 AdministratorAreaRegistration 问题得到解决(我无法理解和解释它)
context.MapRoute( "Administrator", "Administrator/{controller}/{action}/{id}", new { area = "Administrator", controller = "Dashboard", action = "Index", id = UrlParameter.Optional }, new[] { "SampleWebsite.Areas.Administrator.Controllers" } );
context.MapRoute( "Default", // Route name "{controller}/{action}/{id}", // URL with parameters new { area = "", controller = "Home", action = "Index", id = UrlParameter.Optional }, // Parameter defaults namespaces: new[] { "SampleWebsite.Controllers" } );

现在,所有请求都localhost/Home/Index将是未找到响应 404。仅允许具有确切区域名称(管理员)的请求。

谢谢你的帮助!

4

3 回答 3

2

当您使用该网址时/Home/Index,您不会经过该区域。一个区域在您的路由中定义了一个Administrator前缀,并且该前缀在 url 中的存在允许路由引擎识别您在该区域内。

有一些可能的解决方法来设置默认区域。

于 2012-06-10T17:23:24.930 回答
1

如果您需要区域内的起始页,请在默认区域的 HomeController ( /Controllers/HomeController.cs) 中考虑这一点:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        return RedirectToAction("Index", "Home",
            new { area = "Administrator" });
    }
}
于 2012-06-10T17:31:02.373 回答
1

感谢您添加路线。如果您想要在 url 中没有指定区域时使用您的管理区域,您可以尝试将 Global.asax 中的路由替换为:

routes.MapRoute( "Default", "{controller}/{action}/{id}", new { area = "Administrator", controller = "Home", action = "Index", id = UrlParameter.Optional }, new[] { "SampleWebsite.Areas.Administrator.Controllers" } );
于 2012-06-11T14:57:44.957 回答