Элементы управления без представлений для глобальных функций в asp.net MVC (с razor)

#asp.net-mvc #razor

#asp.net-mvc #razor

Вопрос:

Хорошо описанная модель представления / контроллера / модели довольно понятна, когда дело доходит до обновления / удаления / сохранения объекта (скажем, книги) и т.д. … Но как вы, ребята, организуете общий код, такой как заполнение выпадающих списков (из db)? Я использую Jquery ajax для вызова действия элемента управления, но в таких случаях, как получение массивов для выпадающих списков, я чувствую, что они не должны находиться в одном и том же BookController .

Могу ли я иметь контроллер без соответствующего представления только для этих целей?

Спасибо

Ответ №1:

Каждый из них ViewModel является данными для View визуализации. Похоже, вы это понимаете. Когда Ajax запрашивает данные, я думаю, что более разумно, чтобы контроллер для представления отвечал за создание другого ViewModel и возвращал его в виде Json для отображаемого представления. Если нескольким представлениям необходимо получить список книг, следует вызвать /Books/AjaxList (пример неправильного имени метода), как и любое представление в /Books . Разделение ответственности за создание ViewModel на основе Ajax или без Ajax для меня не имеет смысла.

Комментарии:

1. Я думаю, вы неправильно поняли мой вопрос. Прежде всего, я не использую ViewModels. Я просто использую View / Model / Controller. Во-вторых, мой вопрос был больше связан с другой информацией, которая поступает из базы данных и используется в форме, такой как список категорий, атрибуты пользователя и т.д. и т.п. … Которая не относится к модели Book (или ViewModel). Итак, был бы у вас отдельный контроллер для них (без представления)?

2. Когда представление / частичное представление использует пространство имен @Model.classOrInterface, вы определяете модель для представления (ViewModel). Я предпочитаю возвращать модель для использования с помощью запроса View или Ajax — это ViewModel (потому что потребитель — это своего рода представление). Извините, если моя номенклатура привела к путанице.

3. Почему не все необходимые данные для отображения представления передаются в модели или в одном Ajax-запросе (Model) в начале?

4. Потому что это приложение просто не так работает. Многие элементы на странице являются интерактивными и зависят от других элементов. Все, что я спрашиваю, это как вы организуете эти вспомогательные действия. Я склоняюсь к тому, чтобы поместить его в отдельный контроллер.

5. Эрик, я понимаю, что ты имел в виду. Я новичок в MVC — я буду использовать ViewModel и сразу загружу столько данных, сколько смогу. Отметит ваш ответ как ответ.