当设置了PopupDragHandleControlID属性(没有这个属性它可以正常工作)时,ModalPopupExtender定位在屏幕中心的问题.
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; }
解决方法
模态弹出式面板获得绝对位置.所以它需要在一个具有非静态位置的元素中.在这种情况下,我希望它以页面为中心,所以我把它放在一个元素(在这种情况下是UpdatePanel,但它不关心什么样的元素),它具有内联样式的位置:fixed ;左: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上相当高,所以希望这会节省别人一段时间.