Позиционирование AJAX ModalPopupExtender в центре экрана
У меня проблема с позиционированием 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;
}
Ответы
Ответ 1
Модальной всплывающей панели присваивается позиция абсолютная. Поэтому он должен находиться внутри элемента с нестатической позицией. В этом случае я хочу, чтобы она была сосредоточена на странице, поэтому я поместил ее внутри элемента (в данном случае 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 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, поэтому, надеюсь, это сэкономит кому-нибудь еще некоторое время.
Ответ 2
Используйте атрибуты x и y модуля ModalPopupExtender.
Ответ 3
Я знаю, что это старо, но ответа еще нет... так нормально?
В любом случае... убедитесь, что панель отделена от главной страницы/панели. Он использует это как окно для установки положения.
Ответ 4
Я знаю, что это очень старый вопрос, но так же, как и здесь, поиск решения, я думал, что могу опубликовать, как я, наконец, решил проблему, чтобы помочь другим.
Просто используйте этот стиль в своей панели:
<asp:Panel style="left: 50% !important; top: 10% !important; display: none;" />
"Важное" предложение отменяет все остальные настройки из modalpopupextender. Проценты берутся из твитер-бутстрапа в качестве стандарта.
"display" также предотвратит показ вашей панели при загрузке страницы.
Ответ 5
Мне потребовалось много времени, чтобы разобраться в моем случае, но в конце концов мне пришлось только изменить высоту панели, которую я увеличивал от 100% до фиксированной высоты, большей, чем панель.
<asp:Panel ID="pnlUploader" Width="500px"...
У меня также был мой расширитель вне панели, но сомневаюсь, что это имеет значение. AjaxControlToolkit не является фаворитом!
Ответ 6
ModalPopupExtender
показывает Panel
, указанный как PopupControlId
с центром в div, который вы объявили Panel
. Поэтому попробуйте сохранить ModalPopupExtender
, где вы его определили, и вытащить всплывающее окно Panel
из его контейнеров (даже из UpdatePanel
). Это работает для меня.
Удачи.
Ответ 7
#ModalPopUp
{
Position:relative;
Height:400px;
Width:400px;
Margin-left:auto;
Margin-right:auto;
}
Это должно разместить ваше всплывающее окно в центре вашей страницы. Затем просто установите CSS для modalbackground, и вы должны быть в порядке.
Tom
Ответ 8
Надеюсь, это может быть достигнуто двумя способами.
- Введите свойство класса 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 в
Панель.
Ответ 9
.panel
{
position: absolute;
top: 50%;
left:50%;
}
<asp:Panel id ="pnlUploader" CssClass="panel">
Ответ 10
Удалите параметр x, y и repositio nmode по умолчанию, он также занимает центральное положение при прокрутке.