ArcGIS JavaScript API 4.11 - печать вызывает проблему обратной передачи в 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"
    });
});

введите описание изображения здесь

Проблема, с которой я столкнулся, заключается в том, что при нажатии «Дополнительные параметры», «Экспорт» или некоторых других функциях выполняется обратная передача. Это веб-приложение asp.net, и карта находится в элементе управления формы главной страницы asp.net. Это вызывает обратную передачу всей страницы. Есть ли у кого-нибудь рекомендации по предотвращению обратной передачи всей страницы и сохранению функции печати? Он работает правильно, если я перемещаю его за пределы тега, но для правильного размещения на странице область содержимого должна оставаться в форме.


person Steve    schedule 13.06.2019    source источник


Ответы (2)


У меня была аналогичная проблема с виджетом эскиза. Похоже, проблема в том, что кнопки для всех виджетов API не созданы с атрибутом type = "button", это заставляет браузер принимать свой type = "submit" и, таким образом, вызывает Postback. См. Здесь, на форуме ESRI < / а>. Чтобы обойти это для любого из виджетов 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");
});

Это позволяет виджету работать должным образом, не вызывая постбэка.

person Brian    schedule 05.06.2020
comment
Кажется, это решает большинство проблем с виджетами, но с виджетом Sketch все еще есть проблемы. Кнопка для удаления объектов восстанавливается каждый раз при создании или нажатии нарисованной фигуры. Это приводит к потере статуса. Есть предложения о том, какие события захватить, чтобы вернуть его обратно? Я пробовал следующее, чтобы добавить, но при рисовании нескольких фигур кнопка type = теряется. sketch.on (обновление, функция (событие) {$ .each ($ ('# tempSketch'). find (кнопка), function (i, btn) {$ (btn) .attr (type, button);}); }); - person Steve; 16.06.2020

В конце концов я смог найти решение для этого. Я использовал следующий код для создания функции печати и вставил его в div за пределами тега формы asp.net.

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>
person Steve    schedule 13.06.2019