Вопрос

Я пытаюсь предоставить ссылку для фильтрации результатов поиска.

    <%= 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 возможные ошибки:

  1. Неправильная информация о маршруте:проверьте маршруты.Вызовы MapRoute(...) в глобальном файле.ascx.cs/vb, чтобы убедиться маршрут для действия Home#Index настроен правильно
  2. Неправильный контроллер:попробуйте использовать перегрузку 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 точка входа заключается в том, чтобы оставить его без параметров или передать только параметры фильтрации / сортировки.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top