在 CSDN 上经常看到大家讨论如何在 ASP.NET 中用后台代码中弹出对话框的问题,一般的解决办法就是用 Response.Write 写一段脚本代码来弹出对话框,可问题是当对话框弹出后,页面却一片空白。这里讲述的办法就是在弹出对话框的同时保持页面的显示。(其它办法如 RegisterClientScriptBlock()、RegisterStartupScript() 也有一些限制,就不多说了)
【原理】
在页面上放置一隐藏控件,并在页面最后放上一段脚本代码,脚本代码检测隐藏控件的 value 是否为空,若不为空则弹出对话框显示信息,否则什么也不做。
后台代码在需要的时候修改隐藏控件的 value ,这样当页面传到用户那时,最后的脚本代码将执行并弹出对话框。
【注意事项】
1. 隐藏控件必须是 HTML 控件,否则 javascript 无法找到。
2. 后台代码要修改隐藏控件的值,隐藏控件自然得加上 runat=”server” 标记。
3. 在弹出对话框后,记得把隐藏控件的 value 置空,否则刷新的时候又会弹出来了。
4. 脚本代码一定得放在隐藏控件的后面,否则同样找不到。
【实现】
页面代码(只列出 body )
1<body ms_positioning="GridLayout">
2<form id="Form1" method="post" runat="server">
3<asp:textbox id="manuInput" runat="server"></asp:textbox>
4<asp:button id="Button1" runat="server" text=" 对话框 "></asp:button>
5<input id="passTxt" runat="server" type="hidden"/><!--— 隐藏控件 à
6
7</form-->
8<script language="javascript">
9
10if( document.all("passTxt").value!="" )
11
12{
13
14alert( document.all("passTxt").value );
15
16document.all("passTxt").value=""; // 这句可不能掉哟!
17
18}
19
20</script>
21</form></body>
后台代码(只列出 Button1 的响应事件)
private void Button1_Click( object sender, System.EventArgs e)
{
passTxt.Value = manuInput.Text;
}
【效果】
【补充说明】
其实这个方法很简单,不过却很有效,你可以写一个函数 showDialog(string str),然后在后台代码中任何需要的地方调用以弹出对话框。
此外,你还可以把 alert换成showModelDialog(),以弹出功能更丰富,界面更漂亮的窗口。
最后,必须得说明的是,这个方法的思想可以用来在脚本和后台代码之间传递信息,我在我的 web application中就是这样做的,效果很好。
第一次发文档,不足之处大家也就见谅见谅了:)