ASP.NET - 如何动态调整Javascript模态窗口的大小

时间:2013-03-04 16:01:46

标签: javascript asp.net modal-dialog

我有一个带有按钮的ASP.net页面,该按钮可以创建一个模态窗口:

Dim sURL As String = System.Configuration.ConfigurationManager.AppSettings("APP_Path") & "Detail.aspx"
btnDone.Attributes.Add("onclick", "javascript:window.showModalDialog('" & sURL & "',null,'status:no;dialogWidth:auto;dialogHeight:auto;dialogHide:true;help:no;scroll:yes;center:yes');return false;")

我没有使用jQuery。这是一个全新的.aspx页面,而不是当前页面中的新图层。

模态窗口中的数据是绑定到数据表的数据网格。它可以包含5行到50行 - 在运行时,创建和绑定数据表时无法知道。

<asp:DataGrid ID="grdHeader" runat="server" Width="100%" CssClass="grdGrid"
Font-Size="12px" Allowpaging="false" GridLines="None" AutoGenerateColumns="true"
Font-Names="Verdana" CellPadding="0" ShowHeader="false"></asp:DataGrid>

代码背后:

Dim dvHeader as DataView
Dim dtHeader as DataTable

dvHeader = dtHeader.DefaultView
grdHeader.DataSource = dvHeader
grdHeader.DataBind()

我希望模态窗口可以调整显示的数据大小,而不需要滚动条。我确信我可以通过Javascript来做到这一点,但是Javascript真的不是我的强项。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

将一个onload事件添加到弹出窗口的主体,并让它调用以下函数:

function resizeWindow()
{
    var containerElement = document.getElementById('<%=grdHeader.ClientID%>');
    window.resizeTo(containerElement.offsetWidth, containerElement.offsetHeight);
}

不幸的是,offsetHeight没有考虑浏览器中元素的高度(例如书签栏,网址栏等),因此您需要添加一些具体数量以确保显示所有数据。我认为这可能是你可以做你想做的唯一方法,但是,不能根据数据源中的行数估计窗口的高度(即每行25行×25像素= 625像素)

修改 只需注意,您使用showModalDialog基本上打开一个新窗口。除非你使用window.open(...)来打开窗口,否则上面的函数将无效,因为你实际上并没有真正建立模态对话框,这将是最好的选择。