У меня есть частичное представление, что загрузка данных из таблицы базы данных. Мне нужно из частичного представления передавать данные в функцию, которая находится на макете и вызывать ее. Однако я слышал, что секции визуализации не работают в ядре asp.net в частичных представлениях. Но мне действительно нужно вызывать функцию из макета.
Общая логика такова. Загружается частичное представление, в поле которого пользователь выбирает строку, нажимает кнопку удаления. Кнопка удаления отправляет данные в контроллер, контроллер удаляет запись и возвращает объект json. Затем код вызывается из макета.
Мой код, макет нижнего колонтитула:
<script src="~/js/jquery-3.3.1.min.js"></script>
<script src="~/js/jquery.unobtrusive-ajax.min.js"></script>
<script src="~/js/jquery.validate.min.js"></script>
<script src="~/js/jquery.validate.unobtrusive.min.js"></script>
<script src="~/js/bootstrap.min.js"></script>
<script src="~/js/respond.min.js"></script>
<script src="~/js/bootstrap-combobox.js"></script>
<script>
$(document).ready(function () {
function AjaxLoad(data) {
console.log(data);
console.log('*********');
if (data.action == "error") {
alert(data.message);
return;
}
else if (data.action == "load") {
CurrentTable = data.table
}
if (data.page != null || data.page != undefined) {
PageIndex = data.page;
}
$.ajax({
url: "/Admin/ListView",
type: "POST",
data: {
Table: CurrentTable,
Page: PageIndex
},
dataType: "html",
beforeSend: function () {
$('#PartialViewId').html("<p>" + "@NanoWiki.Resources.Translations.Loading" + " \"" + LangCurrentTable + "\"...</p>");
},
success: function (data) {
$("#TableId").html("<p>" + LangCurrentTable + "</p>");
$("#PartialViewId").html(data);
},
error: function () {
$("#PartialViewId").html("@NanoWiki.Resources.Translations.Error" + ":" + LangCurrentTable);
}
});
$("#AddId").css("visibility","visible");
};
});
</script>
@if (IsSectionDefined("EtcScripts"))
{
@RenderSection("EtcScripts")
}
Кнопка удаления (ссылка):
<a asp-action="Delete" asp-controller="Admin" asp-route-Id="@record.Id" asp-route-Table="@ViewBag.Table"
asp-route-Page="@ViewBag.Page" data-ajax="true" data-ajax-method="POST" data-ajax-failure="onFailed" data-ajax-success="AjaxLoad" data-ajax-update="#PartialViewId">
@NanoWiki.Resources.Translations.Delete
</a>
Метод Контроллера:
[HttpPost]
public ActionResult Delete(string Table, int? Id, int? Page)
{
pageIndex = Page.HasValue ? Convert.ToInt32(Page) : 1;
if (!Id.HasValue)
{
obj = new { message = Resources.Translations.UpsErrorMessage, action = "error" };
return Json(obj);
}
var result = Connector.SQLQuery("DELETE FROM " + Table + " WHERE Id = " + Id);
if (result == false)
{
obj = new { message = Resources.Translations.UpsErrorMessage, action = "error" };
return Json(obj);
}
obj = new { table = Table, page = pageIndex, action = "load" };
return Json(obj);
}
Как отправить данные из AjaxLoad
в макет?