Аналогично этому турториал Я называю модальное представление из представления 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">×</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 вернуться к предыдущему представлению и обновить части представления?