ASP.NET Страница загрузки MVC с помощью AJAX

#asp.net #asp.net-mvc #ajax

#asp.net #asp.net-mvc #ajax

Вопрос:

У меня такая ситуация:

Страница в виде аккордеона с 2 вкладками, на одной есть список методов оплаты, на второй — сводка заказа с порядковыми строками, суммами и итогами (отображается как partialview). Выбор метода оплаты приводит к пересчету итоговых сумм заказа, могут возникнуть дополнительные расходы и т. Д.

Каков рекомендуемый способ отображения новой суммы заказа после выбора метода оплаты с использованием AJAX?

Выполнение вызова AJAX и получение всех новых сумм, строк заказа и т. Д. И Установка этих значений с помощью JS мне кажется неэффективным. Идеальной ситуацией было бы, если бы я мог выполнить вызов AJAX с выбранным методом оплаты, и этот вызов вернул бы HTML, который я могу использовать для замены старой сводки.

Плохо ли отображать partialview в HTML на сервере и возвращать его с помощью JSON? Что лучше всего подходит для этой ситуации?

Ответ №1:

У меня есть пример здесь:

Javascript

 $("#divForPartialView").load("/HelloWorld/GetAwesomePartialView",
   { param1: "hello", param2: 22}, function () {
   //do other cool client side stuff
});
  

Действие контроллера

 public ActionResult GetAwesomePartialView(string param1, int param2)
{
    //do some database magic
    CustomDTO dto = DAL.GetData(param1, param2);

    return PartialView("AwesomePartialView",dto);
}
  

Комментарии:

1. Ваша ссылка продается?

2. также вы можете использовать «@Url.Action («GetAwesomePartialView», «HelloWorld»)» вместо «/ HelloWorld / GetAwesomePartialView»

Ответ №2:

В вашем методе действия верните a PartialView([view name]) .

Затем вы можете сделать это с помощью jquery:

 var req = $.ajax({
  type:"GET",//or "POST" or whatever
  url:"[action method url]"
  }).success(function(responseData){
    $('targetelement').append($(responseData));});
  

Где 'targetelement' находится селектор для элемента, в который вы хотите ввести содержимое.

Возможно, вы захотите $('targetelement').html(''); сначала выполнить, прежде чем добавлять ответ к целевому элементу.

Обновить

Или, что еще лучше, используйте .load ответ Рика.

Комментарии:

1. Doh, я никогда не понимал, что вы можете просто вернуть partialview! Спасибо (обоим)!

2. Вместо использования append вы можете использовать replaceWith или просто $(«#element»).load(…)

3. да, я заметил это из ответа @rick 🙂 Каждый день вы узнаете что-то новое.