#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 🙂 Каждый день вы узнаете что-то новое.