关闭

时间:2017-10-05 10:49:36

标签: javascript c# asp.net-mvc kendo-window

我有一个视图,其中我有一个剑道网格,在这个网格中有一个按钮来打开一个细节窗口。按下按钮时,将打开详细信息窗口,这是一个呈现局部视图的kendo窗口。当我关闭剑道窗口时,我将其销毁并将其设置为null。但是我在我的视图和部分视图上都有一个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 个答案:

答案 0 :(得分:1)

清空html内的Details div:

close: function (e) {
    . . .
    $("#Details").html("");
    . . .
}    

return PartialView("_PartialViewLocation", model);做什么,只是从部分视图中返回生成的html。

更新

这里真正的问题是,你应该避免在partials中引用任何脚本。因此,您需要在布局中的某个位置定义一个部分,例如在结束</body>之前,这将允许视图(非部分)包含一些自定义脚本。然后在视图(非部分)中,您可以覆盖此部分以包含自定义脚本:

@section scripts {
    <script src="@Url.Content("~/Scripts/Custom.js")" type="text/javascript"></script>
}

答案 1 :(得分:0)

这与SeM提到的并不完全相同,但他的代码给了我修复它的想法。我所做的是将我的部分视图中的JavaScript代码放入我的视图(而不是布局)中,我没有意识到我的视图能够读取一个kendo-grid而不实际包含它的代码,但它实际上可以。之后,只需检查窗口是否打开并处理部分视图或视图的扫描。