我使用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。只允许确切地使用区域名称(管理员)。
谢谢你的帮助!
答案 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" } );