.Net core MVC - отправка формы через контроллер не возвращает ajax - только URL-адрес контроллера с текстом результата

У меня есть индексная страница с таблицей и простая форма с двумя раскрывающимися списками. На странице также есть несколько разделов с частичными просмотрами. При отправке мне нужно обновить только эти div, а не всю страницу.

Кто-то помог мне с ajax и контроллером. Форма отправки работает отлично. Он отправляет форму и делает почти все, что должен. Но при отправке вместо того, чтобы вернуться к ajax для обновления div, он перенаправляет меня на URL-адрес контроллера со строкой, в которой говорится все, что я передаю в разделе возврата. Как-то сбивает с толку. Я надеюсь, что приведенные ниже разделы помогут разобраться в этом.

Частичный вид формы:

<form id = "ajax_submit" asp-controller = "Home" asp-action = "CreateBreak" class = "DthdropdownGroup ml-3">
<div class = "btn-group" style = "margin-left:-1rem">
    <select class = "form-group dropdownStyling btn-sm dropdown-toggle d-inline-block btn-outline-light" style = "width: 7.4em;" type = "button" data-toggle = "dropdown" aria-haspopup = "true" aria-expanded = "false" id = "EmployeeId" asp-for = "EmployeeId">
        <option>Dispatcher</option>
        @foreach (var item in Model.Employees)
        {
            <option class = "dropdown-item pr-1 form-control" value = "@item.Id">@item.DisplayName</option>
        }
    </select>
</div>

<div class = "btn-group">
    <select class = "form-group dropdownStyling btn-sm dropdown-toggle d-inline-block btn-outline-light" style = "width: 7.3em" type = "button" data-toggle = "dropdown" aria-haspopup = "true" aria-expanded = "false" id = "EmpPosition" asp-for = "EmpPosition">
        <option>Position</option>
        @foreach (var item in Model.Positions)
        {
            <option class = "dropdown-item pr-1" value = "@item.Id">@item.PositionName</option>
        }
    </select>
</div>
<button type = "submit" class = "btn btn-sm btn-block dropdownStyling" id = "break-submit" style = "margin-left: -1rem; width:15rem;">Submit</button>

Контроллер:

        [HttpPost]
    public async Task<JsonResult> CreateBreak(int EmployeeId, int EmpPosition)
    {
        Break newBreak = new Break();

        newBreak.EmployeeId = EmployeeId;
        newBreak.EmpPosition = EmpPosition;
        newBreak.TimeEntered = DateTime.Now;

        _context.Add(newBreak);
        await _context.SaveChangesAsync();

        return Json(new { success = true, });
    }

Javascript:

$(document).on("submit", "#ajax_submit", function () {

// prevent regular form submit
e.preventDefault();

var data = {
    EmployeeId: $("#EmployeeId").val(),
    EmpPosition: $("#EmpPosition").val()
}

$.ajax({
    type: "Post",
    url: "/Home/CreateBreak",
    dataType: 'json',
    data: data,
    success: function () {
        $(" #headerRefresh ").load(window.location.href + " #headerRefresh ");
        $(" .breakRefresh ").load(window.location.href + " .breakRefresh ");
    },
});

})

Часть кода из одного из партиалов, чтобы увидеть, как я настроил партиалы:

    <div class = "dthRefresh">
        <table class = "table table-bordered">
            <tbody>
                @foreach (var item in Model.Dths)
                {
                    @*////EMPLOYEE SENT////*@
                    @if (item.EmpSent == true)
                    {
                        <tr style = "background-color:lightgreen; font-size:large">
                            <td class = "w-75 h-25 p-0">
                                <input type = "hidden" class = "hiddenDthID" value = "@item.Id" />
                                <a href = "Javascript:;" class = "empNameDth" style = "color:black">@[email protected]</a>
                            <td class = "h-25 p-0" style = "font-size:large">@item.EmpPositionNavigation.PositionName</td>
                            <td class = "h-25 justify-content-center p-0 pl-1">
                                <input type = "checkbox" value = "" id = "flexCheckChecked" checked>
                            </td>
                        </tr>
                    }

Форма отправляется просто отлично, но когда я отправляю, она возвращает это:

.Net core MVC - отправка формы через контроллер не возвращает ajax - только URL-адрес контроллера с текстом результата

Таким образом, вместо того, чтобы обновлять эти элементы div и оставаться на странице индекса, он меняет URL-адрес на Home/CreateBreak. Он должен оставаться в индексе и просто обновлять те элементы div, которые находятся на индексной странице. Я застрял на несколько дней. Я очень ценю чью-либо помощь.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
18
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

But on submit, instead of going back to ajax to refresh the divs, it redirects me to the controller's URL with a line that says whatever I pass in the return section. Kind of confusing.

Это потому, что вы не можете предотвратить отправку обычной формы.

Вы пропустили e в function (), измените, как показано ниже:

$(document).on("submit", "#ajax_submit", function (e) {

    // prevent regular form submit
    e.preventDefault();
    //...
})

Ты прав. хороший улов. Спасибо. Когда я вставляю это, он вообще ничего не делает - не подчиняется.

Tyler Johnson 16.03.2022 10:24

Привет, не могли бы вы нажать F12 и проверить панель консоли в браузере, что за сообщение об ошибке?

Rena 16.03.2022 10:30

Похоже, я получаю 500 - "jquery.min.js:2 POST локальный: 44392/Главная/CreateBreak 500 send @ jquery.min.js:2 ajax @ jquery.min.js:2 (анонимно) @ site.js?v=ot2lAjlOLC… DVO0ZU7cP1DSfuM:120 диспетчеризация @ jquery.min.js:2 v.handle @ jquery.min.js:2"

Tyler Johnson 16.03.2022 10:32

Не могли бы вы проверить значение $("#EmployeeId").val() и $("#EmpPosition").val()? Вы можете проверить значение, добавив код, например: console.info($("#EmployeeId").val()) перед var data=xxxxx. Затем проверьте значение на панели консоли в браузере.

Rena 16.03.2022 10:35

Кроме того, не могли бы вы проверить панель Output в инструменте Visual Studio, если есть какое-либо сообщение об ошибке?

Rena 16.03.2022 10:40

Спасибо за вашу помощь. Я не вижу присвоенного значения. В нем говорится «Диспетчер site.js?v=mRow04-BNUmcSwjM8YX655Xjn1u-veLGpTrbuSHmF6o:114», но нет значения. Строка ниже имеет то же самое для позиции. Что касается ошибки, то она имеет только ту, что выше - сообщение 500.

Tyler Johnson 16.03.2022 10:49

Давайте продолжить обсуждение в чате.

Rena 16.03.2022 10:52

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