我是mvc2应用程序的新手(asp.net 3.5 + sp1 + mvc2)。我创建了处理程序“HyphenatedRouteHandler”(通过隐藏MvcRouteHandler)来修改区域,控制器和动作拼写。
代码:
public class HyphenatedRouteHandler : MvcRouteHandler
{
protected override IHttpHandler GetHttpHandler(RequestContext requestContext)
{
if (requestContext.RouteData.Values["area"]!=null)
requestContext.RouteData.Values["area"] = requestContext.RouteData.Values["area"].ToString().Replace("-", "_");
requestContext.RouteData.Values["controller"] = requestContext.RouteData.Values["controller"].ToString().Replace("-", "_");
requestContext.RouteData.Values["action"] = requestContext.RouteData.Values["action"].ToString().Replace("-", "_");
return base.GetHttpHandler(requestContext);
}
}
我的指导结构如下:
地区
--Entertainment_Karmanuk
--Controllers
---- Drama_NatakController.cs
--Models
--Views
---- Drama_Natak
------ Schedule_Timetable.aspx
如果我不使用Area,它工作正常但是当我使用Area时,它会在外部主视图中搜索视图而不是视图下的视图..所以它会出错:
找不到视图'Schedule_Timetable'或其主人。搜索了以下位置:
〜/查看/ Drama_Natak / Schedule_Timetable.aspx
〜/查看/ Drama_Natak / Schedule_Timetable.ascx
〜/查看/共享/ Schedule_Timetable.aspx
〜/ Views / Shared / Schedule_Timetable.ascx
实际上,Drama_Natak / Schedule_Timetable.aspx出现在Area。
中我错过了什么吗?请帮助。
答案 0 :(得分:0)
您需要将route.DataTokens["Area"]
值设置为您所在区域的名称:
requestContext.RouteData.DataTokens["Area"] = requestContext.RouteData.Values["area"];