Маршрутизация приложения ASP.NET MVC не работает для страниц веб-формы с динамическими данными - PullRequest
2 голосов
/ 01 августа 2009

Мне нужны правильные настройки Global.asax, чтобы мой сайт динамических данных работал в проекте ASP.NET MVC. Маршрутизация в настоящее время, кажется, моя проблема.

Вот мой global.asax:

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    MetaModel model = new MetaModel();
    model.RegisterContext(typeof(Models.DBDataContext), new ContextConfiguration() { ScaffoldAllTables = true });
    routes.Add(new DynamicDataRoute("DD/{table}/{action}.aspx") {
        Constraints = new RouteValueDictionary(new { action = "List|Details|Edit|Insert" }),
        Model = model
    });

    routes.MapRoute(
        "Assignment",
        "Assignment/{action}/{page}",
        new { controller = "Assignment", action = "Index", page = "" });

    routes.MapRoute(
        "Default",                                                      // Route name
        "{controller}/{action}/{id}",                                   // URL with parameters
        new { controller = "Admin", action = "Index", id = "" });   // Parameter defaults

}

Ссылка, которую я пытаюсь использовать:

http://localhost:64205/DD/Work_Phases/ListDetails.aspx

Я получаю следующее сообщение:

Ошибка сервера в «/» приложении. ресурс не может быть найден. Описание: HTTP 404. Ресурс, который вы ищете для (или одна из его зависимостей) может были удалены, было его имя изменен или временно недоступен. Пожалуйста, просмотрите следующий URL и убедитесь, что это написано правильно.

Запрошенный URL: /DD/Work_Phases/ListDetails.aspx

Я пытался заменить DD на DynamicData, поскольку папка внутри приложения - DynamicData, и это дало точно такой же результат.

Ответы [ 3 ]

3 голосов
/ 01 августа 2009

URL

http://localhost:64205/DD/Work_Phases/ListDetails.aspx

соответствует вашему второму (по умолчанию) маршруту, который пытается поразить контроллер с именем "DD".

Вам может понадобиться другая запись маршрута, которая выглядит примерно так:

routes.MapRoute(
    "DD",
    "DD/{action}/{page}",
    new { controller = "NameOfController", action = "Index", page = "" }
);

... хотя я не могу представить, зачем вам нужно передавать параметр страницы. Хиты просмотра страницы зависят от действия возврата метода контроллера.


Чтобы лучше взглянуть на интеграцию динамических данных с ASP.NET MVC, взгляните на статью Скотта Хансельмана о подключаемых модулях-гибридах. У него есть некоторые подробности об обработке файлов .ASPX. которые не являются частью MVC. В частности, если у вас есть .ASPX, который вы не хотите обрабатывать контроллерами ASP.NET MVC, вы можете установить Ignore Route:

routes.IgnoreRoute("{myWebForms}.aspx/{*pathInfo}");

Следует отметить, что ASP.NET MVC настроен "из коробки", чтобы игнорировать запросы URL для файлов, которые физически существуют на диске, хотя метод Скотта IgnoreRoute, очевидно, более эффективен.

3 голосов
/ 01 августа 2009

URL не соответствует вашему динамическому маршруту данных, потому что он не соответствует ограничениям, которые вы на него накладываете Вы запрашиваете действие ListDetails, но разрешены только эти действия

Constraints = new RouteValueDictionary(
                    new { action = "List|Details|Edit|Insert" }

РЕДАКТИРОВАТЬ: вы уверены, что существует действие под названием ListDetails? Затем измените вышеуказанные ограничения на

Constraints = new RouteValueDictionary(
                    new { action = "ListDetails|List|Details|Edit|Insert" }

Чтобы быть уверенным в том, что маршрут игнорируется из-за ограничений, можете попробовать одно из действий по умолчанию? Например.

http://localhost:64205/DD/Work_Phases/List.aspx

0 голосов
/ 01 августа 2009

Чтобы ASP.NET MVC работал, вам нужно сопоставить URL-адрес, к которому вы пытаетесь получить доступ, со списком маршрутов.

Для вашего текущего global.asax, примеры допустимых URL-адресов:

http://domain/AnyController/AnyAction/AnyParameter
http://domain/Assignment/
http://domain/Assignment/AnyAction/AnyParameter

Запросы MVC перенаправляются в соответствующий класс Controller, метод Action, с параметрами, переданными в. Запрос MVC не перенаправлен в любой класс ASPX. В этом разница между ASP.NET MVC и обычной страницей ASP.NET.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...