Каков наилучший способ вернуть JSON * и * HTML в одном ActionResult в ASP.NET MVC - PullRequest
4 голосов
/ 16 ноября 2009

Я использую ASP.NET-MVC и возвращаю JSON или HTML из своих действий MVC.

Я сталкивался с некоторыми случаями, когда мне нужно возвращать ОБА JSON и HTML одновременно. Например, я могу обновить корзину покупок и мне нужно вернуть представление HTML, а также обновленную объектную модель JS.

Я нашел много вопросов на SO о том, когда возвращать ответ какого типа, но никто не говорил о том, как вернуть оба.

Есть ли надежный способ сделать это? Должен работать в разных браузерах без лишних раздумий.

  • ответ из нескольких частей?
  • HTML закодирован в результате JSON?
  • какой-то тег сценария, встроенный в HTML, содержащий JSON, который будет запускать функцию для обновления объектной модели. Я склоняюсь к этому методу, но обеспокоен тем, что сценарии могут не работать надежно при добавлении их в DOM с помощью html ("...")
  • как-то иначе?

Если нет хорошего способа, мне просто нужно сделать 2 запроса, чтобы получить HTML, а затем JSON.

Ответы [ 3 ]

2 голосов
/ 16 ноября 2009
an HTML representation as well as an updated JS object model

Если вы используете HTML и JS для обновления одной и той же части представления, рассмотрите HTML, закодированный в результате JSON. Если вы пытаетесь обновить разные части представления, я буду использовать два метода действия, чтобы следовать правилу «единой ответственности».

1 голос
/ 16 ноября 2009

Чтобы вернуть составное тело, вы можете упаковать ответ в контейнер MIME. Но это сделало бы ответ непригодным для большинства клиентов.

Я обычно помещаю HTML в результат JSON.

0 голосов
/ 26 мая 2013

Есть две альтернативы, которыми я пользуюсь

  1. Вернуть HTML и поместить объект json в атрибут «data» скрытого диапазона или значение скрытого ввода. В вашем методе успеха ajax получите объект оттуда.

    $. Post (url, function (resp, st) { if (st == 'success') { var result = $ ('# response-message'). data ('result); if (результат) { } } });

  2. Поместите Javascript в частичный HTML, который вы возвращаете из AJAX, и вызовите существующую функцию из этого скрипта. Существует надежный способ запустить это. Вы всегда можете найти теги скрипта в вашем html и оценить их с помощью eval ().

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