Частичное представление остается активным после закрытия
У меня есть вид, в котором у меня есть кендо-сетка, в этой сетке есть кнопка, чтобы открыть окно подробностей. Когда кнопка нажата, открывается подробное окно, которое является окном кендо, которое представляет частичный вид. Когда я закрываю окно кендо, я уничтожаю его и устанавливаю на ноль. Однако у меня есть функция JavaScript как для моего вида, так и для моего частичного вида, которая улавливает входные данные сканера. Если я сканирую, когда окно с частичным представлением открыто, функция на представлении ничего не делает, однако, когда я закрываю частичное представление, функция JavaScript на частичном представлении по-прежнему перехватывает мои сканы и пытается обработать сканирование для обеих страниц одновременно, Как я могу убедиться, что частичное представление действительно закрыто, чтобы оно не перехватывало мои данные сканирования (желательно с JavaScript).
Метод действия частичного просмотра:
public ActionResult GetKendoWindow(int ID, int PID)
{
//fill and return partial view locationswindow
ViewBag.ID = ID;
ViewBag.PID = PID;
IEnumerable<BinLocationItemModel> model = dbLogic.getItemLocations(PID, ID);
return PartialView("_PartialViewLocation", model);
}
Кендо окна:
function showDetails(e) {
e.preventDefault();
if (wnd) {
wnd.close();
}
var dataItem = this.dataItem($(e.currentTarget).closest("tr"));
wndOpen = 1;
$("#detcont").append("<div id='Details'></div>");
wnd = $("#Details").kendoWindow({
width: "60%",
height: "60%",
actions: ["Minimize", "Maximize", "Close"],
title: "Location Data for: " + dataItem.ArticleID,
content: {
url: "GetKendoWindow",
type: "GET",
data: { ID: dataItem.LineNum, PID: dataItem.PickID }
},
close: function (e) {
wnd.destroy();
wnd = null;
setWindowInactive();
}
}).data("kendoWindow");
wnd.center().open();
}
function setWindowInactive(e) {
wndOpen = 0;
}
Частичное представление JS:
<script type="text/javascript">
//Scanner opvangen
$(document).ready(function () {
if ($('#ItemLocGrid') != null) {
var pressed = false;
var chars = [];
var grid = $('#ItemLocGrid').data('kendoGrid');
var dataitem = grid.dataItem(grid.select());
$(window).keypress(function (e) {
if (e.which >= 48 && e.which <= 57) {
if (chars.length < 3) {
// do nothing
} else {
$('.focus :input').focus();
}
chars.push(String.fromCharCode(e.which));
}
if (pressed == false) {
setTimeout(function () {
if (chars.length >= 5) {
var barcode = chars.join("");
document.getElementById("txtBarcodes").value = barcode;
$('.focus :input').submit();
}
chars = [];
pressed = false;
document.getElementById("txtBarcodes").value = "";
}, 200);
}
pressed = true;
});
}
});
$('#txtBarcodes').submit(function (e) {
var grid = $("#ItemLocGrid").data("kendoGrid");
var dataSource = $("#ItemLocGrid").data("kendoGrid").dataSource;
var allData = grid.dataSource.data();
var code = this.value;
var notification = $("#notification").data("kendoNotification");
console.log("Nothing to see here");
})
2 ответа
Это не совсем то, о чем упоминал SeM, но его код дал мне идею, которая это исправила. Что я сделал, так это вставил свой JavaScript-код из моего частичного представления в мое представление (вместо макета), я не осознавал, что мое представление сможет читать кендо-сетку без фактического содержания его в своем коде, но на самом деле это возможно. После этого нужно было просто проверить, открыто ли окно, и обработать сканирование для частичного просмотра или просмотра.
Пустой ваш html
внутри Details
ДИВ:
close: function (e) {
. . .
$("#Details").html("");
. . .
}
Что такое return PartialView("_PartialViewLocation", model);
делать, просто возвращает сгенерированный HTML, из вашего частичного представления.
ОБНОВИТЬ
Настоящая проблема здесь заключается в том, что вы должны избегать ссылок на любые сценарии в партиалах. Таким образом, вам нужно определить раздел где-то в вашем макете, например, перед закрытием </body>
, что позволит представлениям (не частичным) включать некоторые пользовательские сценарии. Затем в представлении (не частичном) вы можете переопределить этот раздел для включения пользовательских сценариев:
@section scripts {
<script src="@Url.Content("~/Scripts/Custom.js")" type="text/javascript"></script>
}