Различное поведение контроллера MVC между отправкой формы и вызовом AjaxC#

Место общения программистов C#
Ответить
Anonymous
 Различное поведение контроллера MVC между отправкой формы и вызовом Ajax

Сообщение Anonymous »

Я новичок в MVC и веб-разработке в целом, поэтому, пожалуйста, потерпите.

В моем веб-приложении я пытаюсь вызвать действие контроллера через запрос Ajax, поскольку я хочу обновить только частичное представление на моей странице, а не всю страницу. Все работает правильно (частичное представление возвращается без обновления основного представления), за исключением того, что частичное представление возвращает неправильные значения. После некоторой отладки я обнаружил, что ошибка связана с операторами запроса в действии контроллера. Когда действие контроллера вызывается отправкой обычной формы, запросы могут получить значения ввода пользователя, но не тогда, когда я вызываю контроллер с помощью запроса Ajax; они просто возвращают нулевые значения.

Пожалуйста, посмотрите пример ниже, это гораздо упрощенная версия того, с чем я столкнулся. При использовании Ajax общая сумма всегда равна 0 из-за сбоя команд синтаксического анализа с нулевым значением.

Контроллер:

Код: Выделить всё

[HttpPost]
public ActionResult Calculate() {
ViewBag.Total = 0;
for(int i = 1; i < 10; i++) {   // max number of Frames that users can add is 10
string FrameNumber = i.ToString;
try {
string rawValue1 = Request["input1_Frame" + FrameNumber];
string rawValue2 = Request["input2_Frame" + FrameNumber];
decimal Value1 = decimal.Parse(rawValue1);
decimal Value2 = decimal.Parse(rawValue2);
ViewBag.Total += Value1 + Value2;
} catch {
break;
}

return PartialView("Banner");
}
JQuery:

Код: Выделить всё

 $("#calculate").on("click", function () {
$.ajax({
cache: false,
dataType: 'text',
type: "POST",
url: "/Home/Calculate",
success: function (data) {
$(".banner").html(data);
},
error: function () {
alert("Something went wrong in the controller");
}
});
return false;
})
Просмотр:

Код: Выделить всё



Calculate Total
Частичный просмотр:

Код: Выделить всё

Total:
@ViewBag.Total

РЕДАКТИРОВАТЬ: Просто хочу прояснить, почему я не просто передаю значения как параметры Ajax, потому что, на мой взгляд, количество входных данных динамически генерируется с помощью JQuery. Например, у меня есть кадр с 15 входами, но пользователи могут добавить дополнительные кадры, поэтому всего входов будет 30, 45, 60... или больше. Я не совсем уверен, как обрабатывать параметры Ajax таким образом, поэтому для каждого кадра я повторяю цикл 15 раз, каждый раз увеличиваю входной идентификатор и запрашиваю данные таким образом. Я обновил код контроллера, чтобы лучше визуализировать то, что я говорю.

Подробнее здесь: https://stackoverflow.com/questions/458 ... -ajax-call
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»