ArcGIS JavaScript API 4.11 - 打印导致 asp.net 中的回发问题

ArcGIS JavaScript API 4.11 - Print causes Postback Issue in asp.net

我是 ESRI 和 javascript API 的新手。我正在尝试执行打印任务,如下所示:https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Print.html

我正在使用以下代码创建打印功能,它正确显示,如图所示:

require(["esri/widgets/Print"], function (Print) {
  var print = new Print({
    view: view,
    printServiceUrl: "https://printserviceurl/services/PrintService/GPServer/Export%20Web%20Map"
  });

    // Adds widget below other elements in the top left corner of the view
    view.ui.add(print, {
      position: "bottom-left"
    });
});

我遇到的问题是单击 "Advanced Options"、"Export" 或某些其他功能导致回发。这是一个 asp.net 网络应用程序,地图位于 asp.net 母版页表单控件中。这导致整个页面回发。有没有人建议防止整页回发并保留打印功能?如果我将它移到标签之外,它确实可以正常工作,但要将它正确定位在页面中,内容区域必须保持在表单内。

我最终找到了解决方案。我使用以下代码创建打印功能并插入到 asp.net 表单标签之外的 div。

require(["esri/widgets/Print"], function (Print) {
            //create the print widget and insert into the print container
            var print = new Print({
                view: view,
                printServiceUrl: "https://printserviceurl/services/PrintService/GPServer/Export%20Web%20Map"
            }, document.getElementById("divPrintContainer"));
        });

然后我使用样式将容器放置在我想要的位置。此步骤可能需要一些自定义样式,具体取决于您希望 div 出现的位置。如果它在表单标签之外,它将阻止在与打印小部件交互时回发重新加载整个页面。

<div id="divPrintContainer" style="position:absolute;bottom:20px;right:30px;"></div>

我在使用草图小部件时遇到了类似的问题。看来问题是 API 的所有小部件的按钮都不是使用 type="button" 属性创建的,这导致浏览器假定其 type="submit" 和从而导致回发。在 ESRI Forum 上查看此处。为了解决任何 ArcGIS API v 4.x 小部件的问题,我一直在小部件呈现后添加属性:

var esriWidget = new Widget({
    view: this.view,
    container: 'widgetDiv',
});

$.each($('#widgetDiv').find("button"), function (i, btn) {
    $(btn).attr("type", "button");
});

这允许小部件按预期工作而不会导致回发。