Есть несколько случаев, когда вы хотели бы разбить ваш взгляд на несколько небольших компонентов. Один из вариантов использования, с которым я сейчас работаю, - это многоязычный сайт, на котором я хотел бы перезагрузить контент, используя принципы AJAX.
Обычно, что бы я сделал в случае неязыкового сайта, это создать еще один ActionResult для возврата ViewModel, который изменяется с новыми параметрами. Мне нравится использовать пользовательский ActionResult, который я назвал JsonpResult. Проблема заключается в том, что у меня есть ярлыки не в моей базе данных, а в файлах ресурсов. Поэтому мне нужно как-то гидрировать данные моего файла ресурсов в ViewModel.
Как только данные поступают по конвейеру, мой обратный вызов AJAX обрабатывает передачу ответа ViewModel обратно на страницу HTML с использованием Javascript (я использую jQuery).
Это определенно работает, однако это становится вопросом ремонтопригодности. Теперь мне нужно не только поддерживать исходное представление ASP.NET, но и поддерживать набор сценариев, которые обрабатывают поведение AJAXian. Если вам нужен SEO для вашего сайта, вам нужно убедиться, что и на стороне сервера, и на стороне клиента работают одинаково.
Именно здесь для меня вступают в игру частичные представления. Что я делаю, так это «вытаскиваю» логические разделы данных, где происходит большая часть перезагрузки. Приятной особенностью PartialView является то, что вы можете передавать свои ViewData и Model вместе с PartialView. Если ваш PartialView строго типизирован по отношению к вашей ViewModel, вы можете получить Intellisense, чтобы помочь с подключением PartialView.
Теперь все, что мне нужно сделать с моим вызовом AJAX, - это записать ответ обратно в один DIV, а не обрабатывать отдельные точки данных. Это значит, что по трубе будет больше контента. Однако компромисс легче читать и поддерживать код.