MVC - используйте @ Html .ActionLInk для запуска Ajax, чтобы вызвать ActionResult - PullRequest
1 голос
/ 03 марта 2020

Я провел много исследований по этому вопросу. Я не могу найти ничего, что действительно соответствует моей ситуации. Я новый программист. Я работаю над улучшением работы с JavaScript, но это мое слабое место.

У меня есть две базы данных - сотрудники и перерывы. Я приложил картинку, чтобы сделать это более понятным:

Screenshot

Список прерываний из базы данных - это список, который вы видите в таблице на рисунке. Раскрывающийся список диспетчера содержит все имена сотрудников. Удалите имя, нажмите «Отправить» - оно добавится в базу данных и отобразится здесь. Отлично работает.

Теперь я пытаюсь использовать @ Html .ActionLink, чтобы сделать имена кликабельными. Для этого нужно запустить еще одно событие JavaScript, чтобы ввести DateTime.Now в поле TimeCleared, чтобы по существу удалить разрыв из списка.

Я делаю что-то не так, хотя (или многое неправильно). Либо это не обновляет базу данных и отметку времени, что поле TimeCleared, я получаю «Этот запрос был заблокирован, потому что конфиденциальная информация может быть раскрыта сторонним веб-сайтам, когда она используется в запросе GET. Чтобы разрешить запросы GET, установите для JsonRequestBehavior значение AllowGet. " ошибка или другие ошибки, основанные на том, что я пытаюсь.

Часть представления:

<div class="container_lists">
    <div class="container_break col-md-6">
        @*start the break list table*@
        <h5 style="text-align:center">Break List</h5>
        <table class="table-bordered col-lg-12">
            @*populate the table with only those breaks that lack a TimeCleared value*@
            @if (Model != null)
            {
                foreach (var item in Model)
                {
                    if (item.TimeCleared == null)
                    {
                        <tr>
                            @*Make each name clickable to fire JavaScript which activates ActionResult DeleteBreak*@
                            <td class="breakIdNumber">
                                @Html.ActionLink(item.DisplayName, "DeleteBreak", new { id = item.BreakId }, new { onclick = "return confirm('Remove from the break list?');" })
                            </td>
                        </tr>
                    }
                }
            }
        </table>

Часть контроллера:

public ActionResult DeleteBreak(BreakModels breakmodels)
    {
        try
        {
            breakmodels.TimeCleared = DateTime.Now;
            db.SaveChanges();
            return Json(new { success = true});
        }
        catch (Exception ex)
        {
            return Json(new { success = false});
        }
    }

Ajax:

@*Activate the DeleteBreak ActionResult*@
<script>
    $(document).ready(function () {
        $("#RemoveBreak").click(function () {
            var model = {};
            model.BreakId = Number($("#breakIdNumber").val());
            console.log("model", model);
            $.ajax({
                type: "POST",
                url: "/Home/DeleteBreak",
                dataType: 'json',
                data: JSON.stringify(model),
                contentType: "application/json; charset=utf-8",
                success: function (data) {
                    if (data.success)
                        window.location.href = "/Home/Index";
                    else
                        alert("Something went wrong");
                },
                error: function () {
                    alert("Something went wrong");
                }
            });
        });
    });
</script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...