前几天开发Web系统的时候,发现IE对模态窗口支持不怎么友好,在模态窗口中的提交事件会引发再一次打开原来的页面。
后来在网上找了一下,好一点的解决方法都是用Iframe框架来完成的。但是如果要打开多个模态页面的话,就可能要多个Iframe的框架页面。比较郁闷,不过后来想的了一个更好点的方法,只要用一个模态页面就全部搞定,呵呵,所以列出了给有同样需要的人参考。
第一:新建一个Iframe的框架页面VGAMesosphere.aspx。
前台代码:
myOpen.returnValue=1
View Code
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="VGAMesosphere.aspx.cs" Inherits="AssetSys_VGAMesosphere" %> <!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>KM_System</title> </head> <body> <form id="form1" runat="server"> <div id="idDiv" runat="server"> </div> </form> </body> </html>
后台代码:
View Code
using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.Text; public partial class AssetSys_VGAMesosphere : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { string AllUrl = Request.RawUrl; int Indx = AllUrl.IndexOf('?'); string url = AllUrl.Remove(0, Indx + 5);//获取最终要访问的模态页面地址 StringBuilder Html = new StringBuilder(); Html.Append("<iframe id='iframeTo' src='" + url + "' scrolling='auto' style='600px;height:450px'></iframe>"); idDiv.InnerHtml = Html.ToString(); } }
在要打开模态页面的地方这样处理:首先让它访问中间页面,并将要打开的模态页面地址(包括它的参数)作为一个参数传给中间页面。这样就OK了。
如:Response.Redirect("VGAMesosphere.aspx?url=../shishi.aspx?p1=laksdjf&p2=alskjdflalaks&p3=1233453");
function OpenNewWindow(id) {
myOpen = window.showModalDialog("VGAMesosphere.aspx?url=OpenCommentDtl.aspx?id=" + id, "", "dialogWidth=500px;dialogHeight=350px");
//关闭模式窗口时刷新
if (myOpen.returnValue = "1") {
window.location.reload();
}