0

我是 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);
    }
}

我的目录结构如下:
Areas
--Entertainment_Karmanuk
--Controllers
----Drama_NatakController.cs
--Models
--Views
----Drama_Natak
------Schedule_Timetable.aspx

如果我不使用区域,它可以正常工作,但是当我使用区域时,它会在外部主视图中搜索视图而不是视图下的视图。所以它会给出错误:

未找到视图“Schedule_Timetable”或其主视图。搜索了以下位置:
~/Views/Drama_Natak/Schedule_Timetable.aspx
~/Views/Drama_Natak/Schedule_Timetable.ascx
~/Views/Shared/Schedule_Timetable.aspx
~/Views/Shared/Schedule_Timetable.ascx

实际上 Drama_Natak/Schedule_Timetable.aspx 存在于区域中。

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

4

1 回答 1

0

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

requestContext.RouteData.DataTokens["Area"] = requestContext.RouteData.Values["area"];
于 2011-06-23T18:50:21.723 回答