2009-07-31 1 views
2

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

Вот мой 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 

} 

Link, что я пытаюсь использовать это:

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

я набираюсь следующее сообщение:

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

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

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

+0

Какой маршрут вы пытаетесь найти? –

+0

@Adrian: Я пытаюсь добраться до DD/Work_Phase/ListDetails.aspx, но страница не подходит. – RSolberg

ответ

3

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, взгляните на Scott Hanselman's Plugin-Hybrids article. Он имеет некоторые подробности о работе с файлами .aspx, которые не являются частью MVC. В частности, если у вас есть .ASPX, который вы не хотите обрабатывать ASP.NET MVC контроллеры, вы можете установить Ignore Маршрут:

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

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

+0

добавлен маршрут, не повезло – RSolberg

+0

Он должен соответствовать новому маршруту. DD соответствует первому фрагменту в URL-адресе, Work_Phases отображает имя метода в вашем контроллере, NameOfController должен быть именем вашего контроллера (оставьте слово Controller в своем маршруте). –

0

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

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

запрос
http://domain/AnyController/AnyAction/AnyParameter 
http://domain/Assignment/ 
http://domain/Assignment/AnyAction/AnyParameter 

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

3

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

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

EDIT: вы уверены, что это действие называется ListDetails существует? Затем измените ограничения выше

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

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

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