Загрузка файлов не работает в диалоге jQuery UI - PullRequest
4 голосов
/ 18 ноября 2009

Так что у меня есть довольно странная проблема, которую я хотел бы увидеть, если у кого-то есть понимание.

У меня есть страница, на которой я отображаю сетку файлов, которые были загружены на наш сервер. Панель инструментов для сетки дает им возможность загружать больше файлов. Когда они нажимают кнопку «Добавить файл» на панели инструментов, появляется модальное окно jQuery UI Dialog с простым элементом управления загрузкой файлов. После того, как они выбирают файл, они нажимают кнопку «Загрузить» в диалоговом окне, которое отправляет основную форму для загрузки. Также обратите внимание, что, поскольку я использую asp.net, на странице есть только одна форма, поэтому я не отправляю неправильную форму.

Теперь ... когда я пытаюсь найти загруженные файлы на сервере, файлы не загружаются. Что еще хуже, если я переместу элемент управления загрузкой из диалогового элемента div и использую его прямо со страницы без диалогового окна, загрузка будет работать нормально.

Это заставляет меня верить, что, хотя я определяю div, который станет моим диалогом в основной форме, чтобы позволить ему отправлять с обратной передачей, jQuery каким-то образом перемещает его или отсоединяет его от формы.

Возможно ли это? Или я что-то упускаю? Я не могу найти какую-либо документацию, которая говорит в любом случае. Заранее спасибо!

Ответы [ 3 ]

2 голосов
/ 18 ноября 2009

Ты прав. Диалог выводит содержимое за пределы формы и добавляет его в тело. Вероятно, для лучшего контроля над DOM, чтобы он всегда отображался в центре, над всем остальным, и не содержался в каком-то абсолютно позиционированном DIV или около того ...

1 голос
/ 15 октября 2015

Вам нужно переместить диалог внутрь формы.

var dialog = $("#dialog").dialog({
  autoOpen: false,
  height: 300,
  width: 350,
  modal: true,
  buttons: {
    "Upload": function() {
      __doPostBack('uploadfile', '');
      $( this ).dialog( "close" );
    },
    Cancel: function() {
      $(this).dialog("close");
    }
  }
});

dialog.parent().appendTo($("form:first"));
0 голосов
/ 23 декабря 2009

То, что здесь происходит, это то, что пользовательский интерфейс блока удаляет все функциональные возможности нажатия на кнопки в его модальном режиме. Чтобы обойти это, лучшее решение, которое я нашел, - это иметь скрытую кнопку, которая затем будет выполнять желаемую обработку.

Вот пример:

HTML

<asp:Button runat="server" ID="btn_Upload" OnClientClick="UploadFiles(); return false;" />
<asp:Button runat="server" ID="btn_UploadClick" OnClick="btn_UploadFiles_Click" style="display:none;" />

Javascript / Jquery

function UploadFiles()
{
    $.unblockUI({
        onUnblock: function() {
            $('[id$=btn_UploadClick]').click();
        }
     });
}
...