Таблица маршрутов и действия контроллера Asp.Net MVC

Я создаю своего рода каталог с участниками и их профилями. Я использую структуру MVC в .net.

У меня есть представление, которое позволяет вам находить участников на основе некоторых критериев, поэтому мой контроллер имеет результат действия Find (), а затем другой, который принимает команду post. Итак, somesite.com/members/find отображает инструменты поиска, а затем после отправки формы тот же URL-адрес отображает результаты. Теперь я хочу, чтобы имя участника было связано с другим методом actionresult в том же контроллере для отображения их профиля, и я хочу, чтобы URL-адрес соответствовал этому шаблону somesite.com/members/{username}.

Как мне создать метод контроллера, который будет это делать? Есть ли что-то еще, чем это?
Нужно ли мне отображать новые маршруты в global.asax?

Спасибо за помощь.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
5
0
3 056
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Сначала создайте свой метод действия на контроллере следующим образом:

public ActionResult Profile(string userName)
{
    // Do What you want with the userName
    throw new System.NotImplementedException();
}

Затем создайте новый маршрут в файле global.asax для обработки somesite.com/members/{username} следующим образом:

routes.MapRoute(
    "Profile",
    "members/{username}",
    new { controller = "Members", action = "Profile", userName = "" }
);

Вот и все. Я не уверен, что вы вызываете контроллер, на котором будет размещен метод действия. Я принял членов.

Спасибо за быстрый ответ ... Есть ли корреляция между именем maproute и именем метода actionResult (например, Profile - Profile)?

Jeremy 23.01.2009 09:31

Нет, это просто название, которое я дал маршруту.

Dale Ragan 23.01.2009 09:41

Я добавил две вещи, которые вы предложили, но после того, как попробовал, добился результатов. просмотрел страницу somesite.com/members/someuser, и действие профиля не было вызвано ... просто получено сообщение «Ресурс не найден». Еще раз спасибо

Jeremy 23.01.2009 09:48

Как зовут контроллер, к которому вы добавили действие? Я сделал быстрый тест перед тем, как опубликовать свой ответ, и он работал нормально.

Dale Ragan 23.01.2009 09:55

мой контроллер - это класс VendorController "Vendor" ... у каждого поставщика должен быть профиль. Итак, в global.asax я добавил маршрут с именем "Профиль" с URL-адресом "vendor / {username}" и "new {controller = " Vendor ", action = " Profile ", userName = " "}" по умолчанию.

Jeremy 23.01.2009 10:00

Ааа, я вижу проблему. В своем комментарии выше вы указали, что просматривали somesite.com/members/someuser, но ваш URL для маршрута, который вы мне только что дали, - «vendor / {username}». Если вы хотите использовать members / someuser, измените URL-адрес обратно на «members / {username}».

Dale Ragan 23.01.2009 10:06

В противном случае перейдите на somesite.com/vendor/someuser, и это вызовет действие, как вы его настроили.

Dale Ragan 23.01.2009 10:09

Извините за путаницу, я изначально использовал "members", но изменил все на "Vendor", теперь я тестирую с поставщиком / именем пользователя. Поэтому я хочу иметь возможность, например, перейти на somesite.com/vendor/somevendorsname. Спасибо

Jeremy 23.01.2009 10:10

И это все еще не работает? Я тестирую сервер vs2008 dev, закрыл его и снова запустил приложение, но все равно не повезло? Любая идея.

Jeremy 23.01.2009 10:11

Вам необходимо закрыть сервер разработки ASP.NET, который был создан при запуске отладки, щелкнув правой кнопкой мыши значок в области уведомлений и выбрав «Остановить». Как только вы это сделаете, снова выполните отладку приложения.

Dale Ragan 23.01.2009 10:15

Если это единственный маршрут ... Я добавил это в коллекцию маршрутов. Итак, в настоящее время существует маршрут по умолчанию ("{controller} / {action} / {id}") и тот, который я только что добавил.

Jeremy 23.01.2009 10:15

Перезагрузил сервер разработки и по-прежнему имел те же результаты. :(

Jeremy 23.01.2009 10:16

Маршрут профиля, который вы только что добавили, должен находиться над маршрутом, который вы только что разместили в своем комментарии.

Dale Ragan 23.01.2009 10:17

хорошо ... похоже, это была проблема ... хотя теперь у меня есть новый. Я думаю, что смогу решить эту проблему. Кажется, что маршрут по умолчанию конфликтует с этим в том, что somesite.com/vendor/find должен вызвать представление поиска, но вместо этого он рассматривает его как имя пользователя

Jeremy 23.01.2009 10:21

Я вижу параметр под названием "ограничения" на маршруте ... можно ли это исправить?

Jeremy 23.01.2009 10:22

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

Dale Ragan 23.01.2009 10:22

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

Jeremy 23.01.2009 10:23

эй ... спасибо за вашу помощь ... любящий stackoverflow и всю помощь. еще раз спасибо.

Jeremy 23.01.2009 10:24

Другие вопросы по теме