HTML.Проблемы с ActionLink
-
20-08-2019 - |
Вопрос
Я пытаюсь предоставить ссылку для фильтрации результатов поиска.
<%= Html.ActionLink("Filter Results", "Index", new { page = Model.RestaurantList.PageIndex(), searchText = Model.SearchText, useFilter = true, filterOption = Model.FilterOption, filterText = Model.FilterText }, null)%>
Определение контроллера как таковое
public ActionResult Index(int? page, string searchText, bool useFilter, string filterText, string filterOption)
Однако, когда я отлаживаю это, значения не задаются должным образом, даже переменная useFilter .
Моя ссылка отображается localhost /home /index / true?страница = 0
Есть идеи, как это исправить?
Решение
Сегмент кода выглядит нормально.Я думаю, что есть 2 возможные ошибки:
- Неправильная информация о маршруте:проверьте маршруты.Вызовы MapRoute(...) в глобальном файле.ascx.cs/vb, чтобы убедиться маршрут для действия Home#Index настроен правильно
- Неправильный контроллер:попробуйте использовать перегрузку ActionLink, которая явно указывает контроллер
Если вы все еще не можете заставить это работать, возможно, вы захотите опубликовать дополнительную информацию (например, код сопоставления маршрутов, название представления / контроллера).
Другие советы
Похоже, это должно сработать.
Вы убедились, что поля модели, которые вы передаете ActionLink, действительно содержат данные?
Однако, когда я отлаживаю это, значения не задаются должным образом, даже переменная useFilter .Моя ссылка отображается localhost /home /index / true?страница = 0
Я думаю, что ваш параметр useFilter действительно визуализирован.Я думаю, это сопоставлено с маршрутом.
Попробуйте задать жестко заданное значение для searchText
Если это появляется, значит, вы не установили свою модель в контроллере.
У меня была похожая ситуация.
Что- то вроде этого:
Html.ActionLink("Click me", "Index", "Student",
{ ID = theclass.StudentID }, null)
всегда отображается как
localhost/myapp/Student/Index/1234
Пока я экспериментировал, я заметил, что Index
часть исчезла из URL-адреса, если я изменю имя параметра с ID
к чему-то вроде IDX
localhost/myapp/Student/?IDX=1234
Получается , что имя параметра ID
является особенным из-за записи маршрута по умолчанию в Global.asax.cs (который устанавливает шаблон доступа к бизнес-объекту RESTful)
Чтобы обойти это, я просто перестал использовать Index
взять идентификатор и вместо этого определить другой метод, подобный этому:
public ActionResult Detail(int ID)
В конце концов, в соответствии с принципом RESTfull проектирования, Index
предназначен для отображения "списка бизнес-объектов" или какой-то коллекции бизнес-объектов, а не отдельного бизнес-объекта.Итак, передавая идентификатор бизнес-объекта в Index
это как бы нарушает шаблон.
Вместо того чтобы выкручивать руку и форсировать свой неуклюжий дизайн, я перешел на естественный способ.
Я считаю, что наилучшая практика для проектирования Index
точка входа заключается в том, чтобы оставить его без параметров или передать только параметры фильтрации / сортировки.