просматривая основные виды приложений вместо видов конкретной области в MVC2 - PullRequest
0 голосов
/ 29 января 2011

Я новичок в приложении 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
- Контроллеры
---- Drama_NatakController.cs
--Модели
--Просмотры
---- Drama_Natak
------ Schedule_Timetable.aspx

Это прекрасно работает, если я не использую Area, но когда я использую Area, он ищет представление во внешних основных представлениях вместо представлений в представлении .. поэтому выдает ошибку:

Представление '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 присутствует в области.

Я что-то пропустил?Пожалуйста, помогите.

1 Ответ

0 голосов
/ 23 июня 2011

Вам необходимо установить значение route.DataTokens["Area"] для названия вашей области:

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