Alternative to reloading model data

Asked
Viewd156

2

I have a controller view which lists recent comments. I also have a textbox and button to add a new comment. When I post to the Save action, I need to validate the textbox. However if the validation fails, when returning to the view, I also need to reload all the comments all over again, which feels like an unnecessary db call.

Example: My Action contains a parameter called comment. If comment if invalid (blank or contains profanity) Create a new ViewModel. Load the previous comments from db. Add comments to ViewModel AddModelError for the comment. Return View(model).

Is there no way of retaining the comments originally loaded, to prevent hitting the db again?

3 ответов

0

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

0

Ofcourse the biggest candidate here is to use Cache, and possible use a dependency on there so that the cache for that particular set of information only invalidates if the database table for them is modified. You could add a time expiration too for extra efficiency.

Andrtew

2

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

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

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

  • +1 ViewState was a great idea if you wanted to slow down a page. :) jQuery would be an awesome choice here but if many ppl are posting comments you may want to reload them as in the time it took me to type this, someone else may have added a comment.

    griegs27 августа 2009, 22:35