ASP .NET MVC частичные представления и маршрутизация - PullRequest
0 голосов
/ 09 марта 2010

У меня есть вид MVC, который содержит несколько частичных видов. Эти частичные представления заполняются с использованием частичных запросов, поэтому контроллер для самого представления не передает им никаких данных. Можно ли перезагрузить данные в одном из этих частичных представлений, если действие было запущено в другом? Например, одно частичное представление имеет jqGrid, и я хочу обновить данные в другом частичном представлении, когда пользователь выбирает новую строку в этой сетке. Есть ли пример кода для этого сценария (в C #), на который я могу посмотреть, что я делаю неправильно? Я использую ajax-вызовы, чтобы инициировать новый запрос, но не частичные представления обновляются, поэтому я не уверен, связана ли проблема с маршрутизацией, контроллером или вообще это возможно! Спасибо!

1 Ответ

3 голосов
/ 12 марта 2010

Если ваше частичное действие просмотра возвращает ViewResult, ответ содержит фрагмент HTML. Однако вызов Ajax автоматически не вставляет результат в DOM, поскольку результат может быть в любом количестве форматов и / или может потребоваться дополнительная обработка перед обновлением DOM. Таким образом, чтобы обновить частичное представление, вам нужно взять результат вызова Ajax и вставить его в нужное место в дереве DOM.

jQuery имеет отличный метод load(), который инкапсулирует этот процесс для вас. Он вызовет Ajax, возьмет результат и заменит внутренний HTML выбранного элемента. Вы можете даже передать свою собственную функцию для выполнения до того, как она вставит ее в дерево DOM, если вам нужно каким-либо образом преобразовать результат.

Примечание: jQuery.load() удаляет сценарии, возвращенные в результате . Он сохраняет их для выполнения в некоторых sceanrios, но он даже не выполняет их в других сценариях. Поэтому, если ваше частичное представление содержит сценарии, вы можете самостоятельно обновить дерево DOM.

Все это не имеет ничего общего с вашим кодом C #, который выполняется на стороне сервера.

Тем не менее, у вас есть возможность сделать свое действие немного умнее, проверив, является ли запрос простым HTML, поэтому результат будет обработан браузером напрямую, или это Ajax-вызов, и результат будет обработан. по вашему сценарию, прежде чем попасть в DOM. Эта проверка выполняется с использованием Request метода расширения IsAjaxRequest.

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