Расположение AJAX ModalPopupExtender в центре проблемы с экраном - PullRequest
16 голосов
/ 28 августа 2009

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

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

Thepage:

<!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 ]

16 голосов
/ 08 февраля 2013

Модальная всплывающая панель имеет позицию Абсолют . Поэтому он должен находиться внутри элемента, который имеет нестатическую позицию . В этом случае я хочу, чтобы он был центрирован на странице, поэтому я поместил его внутри элемента (в данном случае 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, так что, надеюсь, это сэкономит кому-то еще время .

5 голосов
/ 04 мая 2011

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

1 голос
/ 27 ноября 2013

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

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

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

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

1 голос
/ 26 сентября 2012

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

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

0 голосов
/ 11 февраля 2019

Я использовал это, и он отлично работает. Место, которое вы ищете, это 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>
0 голосов
/ 22 февраля 2013

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

0 голосов
/ 06 февраля 2013
#ModalPopUp
 {
    Position:relative;
    Height:400px;
    Width:400px;
    Margin-left:auto;
    Margin-right:auto;
  }

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

Tom

0 голосов
/ 06 ноября 2012

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

Удачи.

0 голосов
/ 25 ноября 2011
.panel 
{
    position: absolute;
    top: 50%;
    left:50%;
}


<asp:Panel id ="pnlUploader" CssClass="panel">
0 голосов
/ 05 сентября 2011

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...