Рассмотрим проект ASP.NET MVC 1.0 с использованием соглашения об областях, как описано в этом ноябрь. Сообщение в блоге Фила Хаака 2008 года . Это решение прекрасно работает после его установки!
Моя проблема начинается с моего ограниченного знания правил маршрутизации ASP.NET MVC.
Мое намерение - создать метод действия и структуру URL следующим образом:
http://mysite/Animals/Dogs/ViewDog/Buster
DogsController.ViewDog()
выглядит так:
public ActionResult ViewDog(string dogName)
{
if (dogName!= null)
{
var someDog = new DogFormViewModel(dogName); //snip a bunch more
return View(someDog);
}
else { return View("DogNotFound"); }
}
Задача состоит в том, чтобы убедиться, что RegisterRoutes()
содержит правильные записи.
UPDATE
Вот новый отображаемый маршрут:
routes.MapRoute("ViewDog", "Animals/{controller}/{action}/{dogName}",
new { controller = "Dogs",
action = "ViewDog", dogName = "" });
Создана ссылка на URL:
<%= Html.RouteLink("Brown Buster", "ViewDog", new RouteValueDictionary(new { controller="Dogs", action="ViewDog", dogName="Buster" }))%>
URL создан, как и ожидалось. Спасибо Крейгу Штунцу и его сообщению в блоге Html.RouteLink
.
http://mySite/Animals/Dogs/ViewDog/Buster
Новая проблема: Параметр dogName
не извлекает строковое значение "Buster" из URL. Вызов метода успешен, но аргумент оценивается как ноль.
Вопросы
Как вы можете:
- заставить этот маршрут работать со строкой и удалить соглашение по умолчанию
int id
в маршруте? Я бы хотел изменить имя параметра на int
.