Asp.NET MVC3 - Access区域中没有区域的控制器

时间:2012-06-10 17:20:26

标签: c# asp.net-mvc-3 asp.net-mvc-3-areas

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

与之合作 http://localhost:2813/Administrator/Home/Index

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

我收到错误消息:

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

     

未找到“索引”视图或其主视图或视图引擎不支持搜索的> > >位置。搜索了以下位置:   〜/浏览/首页/的Index.aspx   〜/浏览/首页/ Index.ascx   〜/查看/共享/的Index.aspx   〜/查看/共享/ Index.ascx   〜/浏览/首页/ Index.cshtml   〜/浏览/首页/ Index.vbhtml   〜/查看/共享/ Index.cshtml   〜/查看/共享/ Index.vbhtml

     

描述:执行当前网络时发生了未处理的异常> > >请求。请查看堆栈跟踪以获取有关错误的更多信息以及错误的位置。起源于代码。

我还在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。只允许确切地使用区域名称(管理员)。

谢谢你的帮助!

3 个答案:

答案 0 :(得分:2)

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

有一些possible workarounds有默认区域。

答案 1 :(得分:1)

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

public class HomeController : Controller
{
    public ActionResult Index()
    {
        return RedirectToAction("Index", "Home",
            new { area = "Administrator" });
    }
}

答案 2 :(得分: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" } );