Расположение AJAX ModalPopupExtender в центре проблемы с экраном

У меня есть проблема с позиционированием ModalPopupExtender в центре экрана, когда его свойство PopupDragHandleControlID установлено (без этого свойства он работает нормально).

ModalPopupExtender не расположен в центре экрана. Я думаю, что причиной проблемы является CSS-разметка страницы, когда я отключаю ее, всплывающее окно располагается в центре экрана (я не понимаю, почему CSS страницы влияет на ModalPopupExtender, только когда установлено свойство PopupDragHandleControlID)

Страница:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Untitled Page</title>
    <link href="layout.css" rel="stylesheet" type="text/css" />
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <div id="header">
    </div>

     <div id="container">
       <div id="center" class="column">                    

          <div id="centercolcontent" class="centercolcontent">    
            <asp:ScriptManager ID="ScriptManager1" runat="server">
        </asp:ScriptManager>


        <asp:UpdatePanel ID="UpdatePanel1" runat="server" >
            <ContentTemplate>
                <asp:Button ID="btnShowPopup" runat="server" Text="Open" />   
                <asp:Panel ID="pnlUploader" runat="server" CssClass="pnlUploader"   style="display: none;">
                    <cc1:ModalPopupExtender ID="mdlPopup1" runat="server" TargetControlID="btnShowPopup"
                                PopupControlID="pnlUploader" CancelControlID="btnCancel"
                                BackgroundCssClass="modalBackground"
                                PopupDragHandleControlID="pnlUploader" RepositionMode="RepositionOnWindowResize"   />
                    <div id="pnlDragMe" class="pnlDragMe">
                        Image Uploader
                     </div>     

                     <div class="upload" id="upload">             
                         <div id="status" class="info">
                           Please select a file to upload
                         </div>
                        <div class="commands">      
                         <asp:Button ID="btnUpload" runat="server"  Text="Upload" 
                             OnClientClick="javascript:onUploadClick()" />
                         <asp:Button ID="btnCancel" runat="server" Text="Cancel" />
                      </div>        
                   </div>                                      
                </asp:Panel>    

            </ContentTemplate>   
         </asp:UpdatePanel>
          </div>

       </div>

      </div>               
      <div id="left" class="column">
      </div>

      <div id="right" class="column">                        
      </div>          

    <div id="footer">

    </div>




    </div>
    </form>
</body>

</html>

CSS:

body
{
    min-width: 630px; 
}

#container
{
    padding-left: 200px; 
    padding-right: 150px; 
}

#container .column
{
    position: relative;
    float: left;
}

#center
{
    padding: 0px 0px; 
    width: 100%;
}

#left
{
    width: 200px; 
    padding: 0 0px 0 0; 
    right: 200px;
    margin-left: -100%;
}

#right
{
    width: 130px;
    padding: 0 10px; 
    margin-right: -100%;
}

#footer
{
    clear: both;
}


* html #left
{
    left: 150px; /* RC fullwidth */
}

/*** Equal-height Columns ***/

#container
{
    overflow: hidden;
}

#container .column
{
    padding-bottom: 1001em; /* X + padding-bottom */
    margin-bottom: -1000em; /* X */
}



* html body
{
    overflow: hidden;
}

* html #footer-wrapper
{
    float: left;
    position: relative;
    width: 100%;
    padding-bottom: 10010px;
    margin-bottom: -10000px;
    background: #FFF; /*** Same as body background ***/
}



body
{
    margin: 0;
    padding: 0;
}

#header, #footer
{
    font-size: large;
    text-align: center;
    padding: 0.3em 0;
}

#left
{
    /*background: #66F;*/
}

#center
{
    background: #DDD;
}



.modalBackground
{
    background-color: Gray;
    filter: alpha(opacity=70);
    opacity: 0.7;
}

11 ответов

Модальная всплывающая панель имеет абсолютную позицию. Поэтому он должен находиться внутри элемента, который имеет нестатическую позицию. В этом случае я хочу, чтобы он был центрирован на странице, поэтому я поместил его внутри элемента (в данном случае UpdatePanel, но не имеет значения, какой это элемент), который имеет встроенный стиль позиции: исправлено; слева:0; сверху: 0.

<asp:UpdatePanel ID="updProductPopup" runat="server" style="position:fixed;left:0;top:0;">
<contenttemplate>

    <act:ModalPopupExtender ID="mpeProduct" runat="server" BackgroundCssClass="modalPopupBackground" BehaviorID="behaviourModalPopup" OkControlID="btnMpClose" PopupControlID="pnlModalPopup" PopupDragHandleControlID="pnlMpHandle" TargetControlID="btnMpHidden">
    </act:ModalPopupExtender>

    <!-- pnlModalPopup MUST have inline style display:none -->
    <asp:Panel ID="pnlModalPopup" runat="server" CssClass="modalPopup" style="display:none;">
        <asp:Panel runat="server" ID="pnlMpHandle" CssClass="modalPopupDragHandle">
            Panel Header
        </asp:Panel>
        <asp:Panel runat="server" ID="pnlMpContent">Here's my content</asp:Panel>
        <p class="modalPopupClose">
            <a id="btnMpClose" href="#" class="custom-button">Close</a>
        </p>
    </asp:Panel>
    <asp:Button ID="btnMpHidden" runat="server" Text="Button" CssClass="modalPopupHiddenButton" />

</contenttemplate>

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

Используйте атрибуты x и y в ModalPopupExtender.

Я знаю, что это старый, но пока нет ответа... так что все в порядке?

В любом случае... убедитесь, что панель отделена от главной страницы div/panel. Он использует это как окно для установки позиции.

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

Просто используйте этот стиль на вашей панели:

<asp:Panel style="left: 50% !important; top: 10% !important; display: none;" />

Предложение "важный" переопределит все остальные настройки из modalpopupextender. Проценты взяты из начальной загрузки Twitter в качестве стандарта. "Отображение" также будет препятствовать отображению вашей панели при загрузке страницы.

ModalPopupExtender показывает Panel дано как PopupControlId по центру внутри div вы объявили Panel, Поэтому постарайтесь сохранить ModalPopupExtender где вы это определили, и вылетает Panel из его контейнеров (даже из UpdatePanel). Меня устраивает.

Удачи.

Я использовал это, и он отлично работает. Место, которое вы ищете, это X="100" Y="100". Это дает фиксированную позицию, а popupDragHandleControlID дает вам возможность перетаскивать ваше окно, как вы хотите. Здесь решение

<ajaxToolkit:ModalPopupExtender ID="mpePopupTestAdd" runat="server" TargetControlID="hfdPopupAnchorTestAdd" PopupDragHandleControlID="pnlPopupTestAdd"  X="100" Y="100" PopupControlID="pnlPopupFilterAdd" CancelControlID="btnCancelFilterAdd" BackgroundCssClass="ModalPopupBG"></ajaxToolkit:ModalPopupExtender>
<asp:Panel ID="pnlPopupTestAdd" Style="display: none" runat="server" Width="550" DefaultButton="btnOKTestAdd">
    <div id="divContainerTestAdd" runat="server" class="panel Test">
<!-- header-->
<!-- Body -->
        </div>
</asp:Panel>

Это заняло у меня много времени, чтобы разобраться с моим делом, но в итоге все, что мне нужно было сделать, это изменить высоту панели, которую я увеличивал, со 100% до фиксированной высоты, большей, чем панель.

<asp:Panel ID="pnlUploader" Width="500px"...

У меня также был мой экстендер вне панели, но сомневаюсь, если это имеет значение. AjaxControlToolkit не любимый!

#ModalPopUp
 {
    Position:relative;
    Height:400px;
    Width:400px;
    Margin-left:auto;
    Margin-right:auto;
  }

Это должно расположить ваше всплывающее окно в центре вашей страницы. Затем просто установите CSS для modalbackground, и все будет в порядке.

Том

.panel 
{
    position: absolute;
    top: 50%;
    left:50%;
}


<asp:Panel id ="pnlUploader" CssClass="panel">

Удалите параметр x, y и режим repositio n по умолчанию, он также занимает центральное положение при прокрутке.

Надеюсь, что это может быть достигнуто двумя способами.

  • Напишите свойство класса css, как показано ниже, и вызовите имя класса в ModalPopupExtender.

CSS:

.hcenter{margin:0 auto; width:200;} /* I have given a sample width you give the width of your popup */

КОД:

<asp:Panel ID="pnlUploader" runat="server" CssClass="hcenter"   style="display: none;">
  <cc1:ModalPopupExtender ID="mdlPopup1" runat="server" TargetControlID="btnShowPopup"
        PopupControlID="pnlUploader" CancelControlID="btnCancel"
        BackgroundCssClass="modalBackground"
        PopupDragHandleControlID="pnlUploader"
        RepositionMode="RepositionOnWindowResize"   />

...

  • Попробуйте свойство HorizontalOffset на панели.
Другие вопросы по тегам