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





Сначала создайте свой метод действия на контроллере следующим образом:
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 = "" }
);
Вот и все. Я не уверен, что вы вызываете контроллер, на котором будет размещен метод действия. Я принял членов.
Нет, это просто название, которое я дал маршруту.
Я добавил две вещи, которые вы предложили, но после того, как попробовал, добился результатов. просмотрел страницу somesite.com/members/someuser, и действие профиля не было вызвано ... просто получено сообщение «Ресурс не найден». Еще раз спасибо
Как зовут контроллер, к которому вы добавили действие? Я сделал быстрый тест перед тем, как опубликовать свой ответ, и он работал нормально.
мой контроллер - это класс VendorController "Vendor" ... у каждого поставщика должен быть профиль. Итак, в global.asax я добавил маршрут с именем "Профиль" с URL-адресом "vendor / {username}" и "new {controller = " Vendor ", action = " Profile ", userName = " "}" по умолчанию.
Ааа, я вижу проблему. В своем комментарии выше вы указали, что просматривали somesite.com/members/someuser, но ваш URL для маршрута, который вы мне только что дали, - «vendor / {username}». Если вы хотите использовать members / someuser, измените URL-адрес обратно на «members / {username}».
В противном случае перейдите на somesite.com/vendor/someuser, и это вызовет действие, как вы его настроили.
Извините за путаницу, я изначально использовал "members", но изменил все на "Vendor", теперь я тестирую с поставщиком / именем пользователя. Поэтому я хочу иметь возможность, например, перейти на somesite.com/vendor/somevendorsname. Спасибо
И это все еще не работает? Я тестирую сервер vs2008 dev, закрыл его и снова запустил приложение, но все равно не повезло? Любая идея.
Вам необходимо закрыть сервер разработки ASP.NET, который был создан при запуске отладки, щелкнув правой кнопкой мыши значок в области уведомлений и выбрав «Остановить». Как только вы это сделаете, снова выполните отладку приложения.
Если это единственный маршрут ... Я добавил это в коллекцию маршрутов. Итак, в настоящее время существует маршрут по умолчанию ("{controller} / {action} / {id}") и тот, который я только что добавил.
Перезагрузил сервер разработки и по-прежнему имел те же результаты. :(
Маршрут профиля, который вы только что добавили, должен находиться над маршрутом, который вы только что разместили в своем комментарии.
хорошо ... похоже, это была проблема ... хотя теперь у меня есть новый. Я думаю, что смогу решить эту проблему. Кажется, что маршрут по умолчанию конфликтует с этим в том, что somesite.com/vendor/find должен вызвать представление поиска, но вместо этого он рассматривает его как имя пользователя
Я вижу параметр под названием "ограничения" на маршруте ... можно ли это исправить?
Да, вы захотите посмотреть ограничения для маршрута, чтобы решить эту проблему, или опубликовать другой вопрос на SO.
глядя на то, как у меня эта настройка, я, вероятно, просто изменю действие поиска, чтобы оно было действием индекса поставщика ... Это имеет немного больше смысла
эй ... спасибо за вашу помощь ... любящий stackoverflow и всю помощь. еще раз спасибо.
Спасибо за быстрый ответ ... Есть ли корреляция между именем maproute и именем метода actionResult (например, Profile - Profile)?