2013-03-19 6 views
1

Мой регистрационный маршрут выглядит следующим образом:маршрут ASP.NET MVC не соответствует

routes.MapRoute(
     "course_list", 
     "course/list", 
     new { controller = "course", action = "list" } 
    ); 

    routes.MapRoute(
     "course_view", 
     "course/view/{id}", 
     new { controller = "course", action = "view", id = UrlParameter.Optional } 
    ); 

    routes.MapRoute(
     name: "Default", 
     url: "{controller}/{action}/{id}", 
     defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
    ); 

я могу перейти к/курса/просмотр/87 и правильный маршрут согласован. Когда я посещаю страницу/курс/список и нажимаю ссылку на этой странице, которая указывает на/course/view/87, я получаю список 404:/course/list не найден. Есть идеи?

Спасибо

+0

Вот ссылка на страницу с кнопкой, действующей как ссылка: http://hspot.ca/course/list –

+0

ok, whats Я вижу отображаемый URL. добавьте вспомогательный код, который вы использовали для его создания. –

+0

Нажмите на кнопку «Подробности» на этой странице, и отладчик маршрута покажет ошибку. –

ответ

0

В настоящее время

http://hspot.ca/course/list 

матчи

True course/list controller = course, action = list 

но поставляет 404. (который отличается от вашего письма, вы сказали эту страницу работы).

Такой 404 возвращается, когда не может быть найдено сочетание контроллера/действия, которое может обрабатывать маршрут и его аргументы. Убедитесь, что у вас есть

CourseController что имеет метод List() без аргументов.

+0

у него есть метод списка. Я могу перейти к нему –

+0

... и в этом действии нет параметра. Так что технически это должно быть совпадение. –

+0

сейчас я тоже могу, думаю есть строительство продолжается. было предположение, когда я вижу 404, и маршруты совпадают, это в основном такая проблема привязки.Чтобы отлаживать шаг привязки, вы можете создать фиктивное связующее или использовать источник mvc4, и некоторые из них несут определенную работу. Любые фильтры, такие как атрибуты HttpPost или так? – citykid

1

Элемент кнопки рассматривается как кнопка отправки (то есть: type = "submit", если не установлен атрибут типа по умолчанию). Поэтому браузер инициировал почтовый запрос, который не удовлетворен маршрутом, так как все мои действия - это get (s).

Благодарим вас за ваше время.

+0

хорошая находка. совет для будущего, измените свое имя пользователя на что-то незабываемое. сделать присутствие на SO. удачи. –

0

Я думаю, что вы немного усложнили его. Вам действительно не нужны первые два Маршрута, только один dafault будет делать все отлично. Кроме того, я думаю, что это плохая идея назвать ваше действие «view», есть шанс, что есть другой вариант? Он просто просит неприятностей.

Структура твой проект так:

Controllers/Course/CourseController.List.cs - Partial with List() method 
Controllers/Course/CourseController.View.cs - Partial with View(string id) method 

Views/Course/List.cshtml 
Views/Course/View.cshtml 

Вы должны получить то, что вы ищете гораздо меньше хлопот.

Удачи!

+0

Я добавлял их с тех пор, как ничего не соответствовало ... и, конечно, удалил их все, как только я решил проблему с кнопкой. –

Смежные вопросы