Почему скрипт перестал работать, когда я начал использовать вызов ajax?

Я использовал tempData, чтобы хранить сообщение, возвращаемое из базы данных в контроллер, а затем использовать его в поле зрения. Это работало, пока я не сделал вызов ajax для публикации данных.

[HttpPost]
public ActionResult AddAppointment(AddBookingsViewModel AddBookingVM) {

    BookingsRepository BookingRep = new BookingsRepository();

    if (ModelState.IsValid) {
        int ReturnRowsCount = BookingRep.InsertCustomerAppointments(AddBookingVM, out ReturnStatus, out ReturnMessage, out ReturnBookingID);

        if (ReturnRowsCount > 0){
                TempData["Message"] = ReturnMessage;
        }

        else {
            TempData["Message"] = ReturnMessage;
        }
    }

    else {
        TempData["Message"] = "Some fields are required";
    }

    return View(AddBookingVM);
}

Вид:

@model ZahidCarWash.ViewModels.AddBookingsViewModel

@{
    ViewBag.Title = "Add Appointment";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<div id="divMessage" class="alert alert-info fade in MessageStrip">
    <a href="#" class="close" data-dismiss="alert" aria-label="close">&times;</a>
    @TempData["Message"].ToString()
</div>

@if (!string.IsNullOrEmpty(TempData["Message"].ToString())) {
    <script type="text/javascript">$("#divMessage").show();</script>
}

else {
    <script type="text/javascript">$("#divMessage").hide();</script>
}

вызов ajax:

$('form').submit(function (e) {
    e.preventDefault();
    if (!$(this).valid()) {
        return;
    }

    var url = '@Url.Action("AddAppointment")';
    var data = $(this).serialize();

    $.post(url, data, function (response) {

    });
});

Он работал, когда я использовал Form.Post в начальной форме, но перестал работать, когда я начал использовать вызов ajax.

Я установил точку останова, и она доходит до нее, но не отображается.

Почему?

Есть ошибки консоли? Есть ли у действия формы другое происхождение? Предполагая, что ответ где-то действительно используется: $.post(url, data, function (response) { $("#someontainer").html(response); });

mplungjan 11.04.2018 14:08

Потому что ты им не пользуешься. function (response) {} должен фактически размещать содержимое ответа на странице

Andrei 11.04.2018 14:08

в данный момент в вашем коде вы делаете запрос, но ничего не делаете с ответом. Так что, возможно, это сработало на стороне сервера, но вы не написали никакого кода для обработки этого в своем пользовательском интерфейсе. Кстати, если вы используете ajax, сервер действительно должен возвращать частичное представление (или даже просто JSON), а не целое представление (которое включает все заголовки HTML, теги тела и т.д., которые уже есть на вашей странице, они вам не нужны опять же, вам нужно только то, что необходимо для обновления в страницы)

ADyson 11.04.2018 14:09

TempData полезна при передаче данных от действия к действию. Измените его на ViewBag или ViewData, если хотите, чтобы он отображался

Sandip 11.04.2018 14:13

@Sandip, который здесь не имеет смысла, и временные данные, и viewbag не будут работать, пока все представление не будет перерисовано, а ajax этого не сделает

RAHUL S R 11.04.2018 14:14

@Sandip ни один из них не будет возвращен как часть ответа от ajax. Возвращается только окончательный обработанный HTML-код просмотра, после он был обработан механизмом Razor.

ADyson 11.04.2018 14:27

@ADyson. Дать согласие. Это была всего лишь попытка один раз попробовать, прежде чем вносить какие-либо изменения в код.

Sandip 11.04.2018 14:36
0
7
65
0

Другие вопросы по теме