查看应用程序主视图而不是MVC2中特定区域的视图

时间:2011-01-29 11:21:01

标签: asp.net asp.net-mvc-2 controller area

我是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。

我错过了什么吗?请帮助。

1 个答案:

答案 0 :(得分:0)

您需要将route.DataTokens["Area"]值设置为您所在区域的名称:

requestContext.RouteData.DataTokens["Area"] = requestContext.RouteData.Values["area"];