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

ArcGIS JavaScript API 4.11-asp.net中打印导致回发问题,javascript,asp.net,postback,arcgis-js-api,Javascript,Asp.net,Postback,Arcgis Js Api,我不熟悉ESRI和javascript API。我正在尝试执行打印任务,如下所示: 我正在使用以下代码创建打印功能,它显示正确,如图所示: require(["esri/widgets/Print"], function (Print) { var print = new Print({ view: view, printServiceUrl: "https://printserviceurl/services/PrintService/GPServer/Export%20W

我不熟悉ESRI和javascript API。我正在尝试执行打印任务,如下所示:

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

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"
    });
});


我遇到的问题是单击“高级选项”、“导出”或其他一些功能会导致回发。这是一个asp.net web应用程序,地图位于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>

我在sketch小部件上遇到了类似的问题。问题似乎在于,API的所有小部件的按钮都不是使用type=“button”属性创建的,这会导致浏览器假定其type=“submit”,从而导致回发。请看这里。为了解决任何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");
});

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

这似乎解决了小部件的大多数问题,但草图小部件仍然存在问题。每次创建或单击形状绘制的形状时,删除特征的按钮都会重新生成。这会导致它失去状态。有没有关于捕捉哪些事件以将其收回的建议?我试图添加以下内容,但在绘制多个形状时,type=“button”丢失。sketch.on(“更新”,函数(事件){$.each($('#tempsetch').find(“按钮”),函数(i,btn){$(btn.attr(“类型”,“按钮”);});