Альтернатива перезагрузке данных модели - PullRequest
2 голосов
/ 27 августа 2009

У меня есть вид контроллера, в котором перечислены последние комментарии. У меня также есть текстовое поле и кнопка, чтобы добавить новый комментарий. Когда я отправляю сообщение в действие Сохранить, мне нужно проверить текстовое поле. Однако, если проверка не пройдена, при возврате к представлению мне также необходимо заново загрузить все комментарии, что выглядит как ненужный вызов БД.

Пример: Мое действие содержит параметр под названием комментарий. Если комментарий недействителен (пуст или содержит ненормативную лексику) Создайте новую ViewModel. Загрузить предыдущие комментарии из БД. Добавить комментарии к ViewModel AddModelError для комментария. Возвратный вид (модель).

Нет ли способа сохранить изначально загруженные комментарии, чтобы предотвратить повторное попадание в базу данных?

Ответы [ 3 ]

2 голосов
/ 27 августа 2009

Есть много способов сохранить комментарии, но в этом случае вызов БД может быть не таким уж плохим вариантом. Но ответить на то, что я считаю корнем вашего вопроса, является то, что не существует «встроенного» способа просто волшебным образом сохранить исходные комментарии.

Это не веб-формы, так что вы не будете иметь все комментарии во ViewState (хорошо!), Так как веб-формы волшебным образом сохранили много данных в пост-беках. POST для вашего действия Save, и рендеринг получающегося представления принципиально не отличается от GET для вашей страницы недавних комментариев - и если запрос из базы данных в порядке на странице комментариев, то это должно быть хорошо для Save in my мнение.

Сказав это, есть место для улучшений, и AJAX , вероятно, является одним из ваших лучших вариантов. Используя jQuery или MS Ajax (Ajax.BeginForm()), вы можете вызвать метод save, который выполняет свою функцию, и вернуть только недавно сохраненный комментарий, добавив его к комментариям на вашей странице. Вы не только сохранили вызов БД, но и улучшили пользовательский интерфейс!

0 голосов
/ 27 августа 2009

Возможно, вы могли бы использовать «TempData» для передачи результата следующему запросу контроллера. Обычно это работает, когда вы знаете, каким будет следующий запрос?

0 голосов
/ 27 августа 2009

Конечно, самым большим кандидатом здесь является использование Cache, и, возможно, использование там зависимости, так что кэш для этого конкретного набора информации становится недействительным, только если таблица базы данных для них модифицирована. Вы также можете добавить срок действия для дополнительной эффективности.

Andrtew

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