Asp.net中使用javascrip的模态窗体的一点体会
2006-09-14 11:46
375 查看
做程序中要不断地弹出新增、修改的窗口,感觉每次敲代码是一种痛苦。所以,稍稍总结了一下,将模块窗口的弹出丢在了一个公共类(Function)的方法里面进行处理(其实早就该这么做)。
eg:
public string ModalWindow(string openAspxPage,int width,int height)
{
string js = string.Format("javascript:window.showModalDialog(\"{0}\",window,\"status:false;dialogWidth:{1}px;dialogHeight:{2}px\")",openAspxPage,width,height);
return js;
}
本来想用StringBuilder来写的,可是StringBuilder写起来实在麻烦,干脆就换了string,反正影响不大。
另外,又写了一个关闭页面的方法,写得粗糙一些,将就着用吧。
public string ClosePage()
{
StringBuilder js = new StringBuilder();
js.Append("<script language=\"JavaScript\">");
js.Append("window.close();");
js.Append("</script>");
return js.ToString();
}
项目中,除了添加、修改的页面是Aspx,其它的都是ascx。
感觉上,就是openApxPage的大小不太好控制,而且上面写的代码并不适合于DataGrid控件中的LinkButton控件,所以又得再写一个方法重载了。
使用模态窗口时,还得注意三个问题:
1、要弹出的页面中,一定要保证<head></head>标签间有<base target=“_self”>,否则会弹出的模态窗口上,点击按钮时,会再次弹出一个新页面。
2、被弹出页面的按钮的事件处理中,应该有Response.Write(new Function().ClosePage());语句,用以关闭当前的模态窗口。
3、因为幽默的缓存原因,如果你在模态窗口中修改了数据,你会发现,父页面上的数据刷新了,但是当你再点击按钮,重新弹出模态窗口时,你会发现模态窗口中的内容还是上次的内容,经过我试验,手动改了html代码后,点击弹出的模态窗口还是弹出相同的页面,所以,这里要绕开这个机制,方法是在被弹出的aspx页面后加上随机参数。上面模态窗口代码可以改成如下,以避免此问题:
public string ModalWindow(string openAspxPage,int width,int height)
{
string js = string.Format("javascript:window.showModalDialog(\"{0}&rand="+new Random().Next().ToString()+ "\",window,\"status:false;dialogWidth:{1}px;dialogHeight:{2}px\")",openAspxPage,width,height);
return js;
}
注意红字部分参数,是自定义的一个参数,此参数应该是整个项目中唯一的变更名称,并且无意义(最保险的办法是把这个变更命名为lakjsdflawdfqwoifa之类的名称)。
还有一个简单办法:加上 Response.Expires = -1 就可以了
基本上,满足了上述条件,做页面时就操作模态窗口,相对就简单了。
如果还想做得简单一些,可以把ModalWindow 方法写得更完善一些,因为时间较紧,所以这里的东西比较粗糙。有空时,把它改一下,并完善一下Function类的内容,增加一些常用的JavaScript的代码,让它成为可配置的数据。
对了,有空时应该把什么“有声有色“之类的软件里自带的JavaScript代码改动一下,重新做一个专门的JavaScript特效.net类库,到时好用。
eg:
public string ModalWindow(string openAspxPage,int width,int height)
{
string js = string.Format("javascript:window.showModalDialog(\"{0}\",window,\"status:false;dialogWidth:{1}px;dialogHeight:{2}px\")",openAspxPage,width,height);
return js;
}
本来想用StringBuilder来写的,可是StringBuilder写起来实在麻烦,干脆就换了string,反正影响不大。
另外,又写了一个关闭页面的方法,写得粗糙一些,将就着用吧。
public string ClosePage()
{
StringBuilder js = new StringBuilder();
js.Append("<script language=\"JavaScript\">");
js.Append("window.close();");
js.Append("</script>");
return js.ToString();
}
项目中,除了添加、修改的页面是Aspx,其它的都是ascx。
感觉上,就是openApxPage的大小不太好控制,而且上面写的代码并不适合于DataGrid控件中的LinkButton控件,所以又得再写一个方法重载了。
使用模态窗口时,还得注意三个问题:
1、要弹出的页面中,一定要保证<head></head>标签间有<base target=“_self”>,否则会弹出的模态窗口上,点击按钮时,会再次弹出一个新页面。
2、被弹出页面的按钮的事件处理中,应该有Response.Write(new Function().ClosePage());语句,用以关闭当前的模态窗口。
3、因为幽默的缓存原因,如果你在模态窗口中修改了数据,你会发现,父页面上的数据刷新了,但是当你再点击按钮,重新弹出模态窗口时,你会发现模态窗口中的内容还是上次的内容,经过我试验,手动改了html代码后,点击弹出的模态窗口还是弹出相同的页面,所以,这里要绕开这个机制,方法是在被弹出的aspx页面后加上随机参数。上面模态窗口代码可以改成如下,以避免此问题:
public string ModalWindow(string openAspxPage,int width,int height)
{
string js = string.Format("javascript:window.showModalDialog(\"{0}&rand="+new Random().Next().ToString()+ "\",window,\"status:false;dialogWidth:{1}px;dialogHeight:{2}px\")",openAspxPage,width,height);
return js;
}
注意红字部分参数,是自定义的一个参数,此参数应该是整个项目中唯一的变更名称,并且无意义(最保险的办法是把这个变更命名为lakjsdflawdfqwoifa之类的名称)。
还有一个简单办法:加上 Response.Expires = -1 就可以了
基本上,满足了上述条件,做页面时就操作模态窗口,相对就简单了。
如果还想做得简单一些,可以把ModalWindow 方法写得更完善一些,因为时间较紧,所以这里的东西比较粗糙。有空时,把它改一下,并完善一下Function类的内容,增加一些常用的JavaScript的代码,让它成为可配置的数据。
对了,有空时应该把什么“有声有色“之类的软件里自带的JavaScript代码改动一下,重新做一个专门的JavaScript特效.net类库,到时好用。
相关文章推荐
- Asp.net中使用javascrip的模态窗体的一点体会
- Asp.net中使用javascrip的模态窗体的一点体会
- Asp.net中使用javascrip的模态窗体的一点体会。
- Asp.net中使用javascrip的模态窗体的一点体会。(转)
- 使用ASP.NET中的一点体会--关于代码分离[原创]
- 使用ASP.NET中的一点体会--关于代码分离(转载)
- asp.net中使用窗体身份验证
- Asp.net模态子窗体及其数据传递
- ASP.NET 的模态窗体的处理
- 在ASP.NET使用javascript的一点小技巧
- asp.net中使用窗体身份验证
- asp.net中使用窗体身份验证
- ASP.net下使用static变量的一些体会
- 在Asp.Net移动窗体中不可以使用
- Asp.net 2.0使用Global.asax制作网站计数器的一点心得
- 在ASP.NET使用javascript一点小技巧
- 使用反射将业务对象绑定到 ASP.NET 窗体控件
- ASP.net中使用ListBox一点经验
- 读使用反射将业务对象绑定到 ASP.NET 窗体控件有感(二)
- 如何使用 C# .NET 在 ASP.NET 应用程序中实现基于窗体的身份验证