Проблемы с Html.ActionLink - PullRequest
       15

Проблемы с Html.ActionLink

0 голосов
/ 28 июня 2009

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

    <%= 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? Page = 0

Есть идеи как это исправить?

Ответы [ 4 ]

2 голосов
/ 28 июня 2009

Сегмент кода выглядит нормально. Я думаю, что есть 2 возможные ошибки:

  1. Неправильная информация о маршруте: проверьте маршруты. КартаRoute (...) звонки в файл global.ascx.cs / vb, чтобы убедиться маршрут для действия Home # Index правильно настроенный
  2. Неправильный контроллер: попробуйте использовать перегрузку ActionLink, которая явно указывает контроллер

Если вы все еще не можете заставить его работать, возможно, вы захотите опубликовать дополнительную информацию (например, код отображения маршрута, название представления / контроллера)

0 голосов
/ 07 августа 2012

У меня была похожая ситуация.

Примерно так:

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 точки входа является сохранение ее без параметров или передача только параметров фильтрации / сортировки.

0 голосов
/ 28 июня 2009

Однако, когда я отлаживаю это, значения не установлены должным образом, даже переменная useFilter. Моя ссылка отображается localhost / home / index / true? Page = 0

Я думаю, что ваш параметр useFilter фактически отображается. Я думаю, он привязан к маршруту.

Попробуйте установить жестко закодированное значение для searchText

Если он появляется, значит, вы не установили свою модель в контроллере.

0 голосов
/ 28 июня 2009

Похоже, должно работать.

Проверено ли, что поля модели, передаваемые в ActionLink, действительно содержат данные?

...