C # MVC: дело в ModelBinder или нет? Ищите «самое чистое» решение - PullRequest
0 голосов
/ 11 июня 2009

В моем частичном представлении MVC есть таблица на основе foreach:

</p> <pre><code><% foreach (var item in Model) { %> <tr> <td><%= Html.Encode(item.FirstName) %></td> <td><%= Html.Encode(item.LastName) %></td> <td><%= Html.Encode(item.LastVisit) %></td> </tr> <% } %>

Рядом с ним у меня есть другой элемент управления с кучей полей, которые позволяют выполнять поиск различными способами, включая раскрывающиеся списки параметров (поиск по определенным идентификаторам и т. Д.):

</p> <pre><code><select> <option value="1">Local</option> <option value="2">Public</option> <option value="3">Special</option> </select> <input type="text" name="freeTextSearch" /> <input type="text" name="floorNumber" />

Буду ли я использовать здесь собственный ModelBinder или просто объект "ContactFilter", подобный этому:

</p> <pre><code>public class ContactFilter { public Int32 ContactSourceId; public String FreeTextSearch; public Int32 FloorNumber; }

, а затем получить к нему доступ таким образом:

</p> <pre><code>public ActionResult Filter(ContactFilter filter) { // do filtering, return view }

Или есть лучший способ сделать это? Другая проблема, с которой я сталкиваюсь, заключается в том, что мне необходимо включить в фильтр параметры сортировки и подкачки (текущая страница, поле сортировки, направление). Направление сортировки необходимо преобразовать из строки в экземпляр перечисления SortDirection. Так что, думаю, я больше не могу использовать модель Binder по умолчанию для этого, или я могу?

1 Ответ

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

Показываете ли вы / скрываете поля поиска на основе выбранного элемента в раскрывающемся списке? (Local / Public / Special)

Если это так, вы можете изменить действие формы с помощью javascript при изменении раскрывающегося списка и создать действие контроллера для каждого набора полей поиска, которые можно использовать сразу.

Тогда каждое действие на вашем контроллере может принимать только те параметры, которые ему необходимы. Похоже, это может облегчить тестирование.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...