обновить бритву создать вид после закрытия модального вида? - PullRequest
0 голосов
/ 30 апреля 2020

Аналогично этому турториал Я называю модальное представление из представления CREATE, где новый объект может быть создан и сохранен через контроллер в БД. После закрытия модального представления должно быть показано представление CREATE. Моя проблема в том, что в настоящее время я могу вызывать только представление CREATE с данными из БД (изменения, сделанные пользователем до вызова модального представления, теряются). Кроме того, созданный новый объект должен быть выбран в элементе управления представления CREATE, а список выбора в ViewData должен быть обновлен новым объектом. Вот часть моего кода:

Create.cs html с элементом управления select и кнопкой для вызова модального представления:

<form asp-action="Edit">
    <div class="form-group">
        <label asp-for="WorkstionID" class="control-label"></label>
        <p class="btn-group-justified">
            <select id="workstations" asp-for="WorkstionID" class="form-control" asp-items="ViewBag.WorkstionID">
                <option value="">For all Workstations</option>
            </select>
        <a href="#" class="btn" onclick="EditWS(@Model.ApplicationID)"><i class="glyphicon glyphicon-pencil"></i> </a>
    </p>
</div>

Edit.cs html с div раздел для модального вида и функции сценария для вызова модального вида:

    <div class="modal fade" id="myModal1">
        <div class="modal-dialog">
            <div class="modal-content">
                <div class="modal-header">
                    <a href="#" class="close" data-dismiss="modal">&times;</a>                
                    <h3 class="modal-title">Create / Edit Workstation</h3>                 
                </div>
                <div class="modal-body" id="myModalBodyDiv1">
                </div>
            </div>
        </div>
    </div>

    <script>
        function EditWS(applicationID) {
            var e = document.getElementById("workstations").value;
            var url = "/Settings/EditWS?workstationID=" + e + "&applicationID=" + applicationID;

            $("#myModalBodyDiv1").load(url, function () {
                $("#myModal1").modal("show");
            })
        }
    </script>

Контроллер:

        public async Task<IActionResult> EditWS(int workstationID, int applicationID)
        {
            WorkstationRow workstationRow;
            if (workstationID > 0)
                workstationRow = await _context.Workstation.Where(x => x.WorkstationID == workstationID).SingleOrDefaultAsync();
            else
                workstationRow = new WorkstationRow { ApplicationID = applicationID };

            return PartialView("EditWS", workstationRow);
        }

        [HttpPost]
        public async Task<IActionResult> EditWS([Bind("WorkstationID,WorkstationName,ApplicationID,ShowSelect")] WorkstationRow workstationRow)
        {
            if (workstationRow.WorkstationID == 0)
            {
                _context.Add(workstationRow);
            }
            else
            {
                _context.Update(workstationRow); //TODO try catch
            }
            await _context.SaveChangesAsync();
            return View(workstationRow); 
        }

частичное представление с функцией, которая вызывается после нажатия кнопки отправки:

<script>
    var DoSubmit = function (applicationID) {

        $("#loaderDiv").show();
        var myformdata = $("#myForm").serialize();
        $.ajax({
            type: "POST",
            url: "/Settings/EditWS",
            data: myformdata,
            success: function () {
                $("#loaderDiv").hide();
                $("#myModal").modal("hide");
                window.location.href = "/Settings/Create" + "?applicationID=" + applicationID;
            }
        })
    }    
</script>

Я знаю, с этим window.location.href = "/Settings/Create" + "?applicationID=" + applicationID; Я возвращаюсь в новое представление ceate, но не знаю, как go вернуться к предыдущему представлению и обновить части представления?

...