一个小函数:在Page和UpdatePanel都能显示信息的Alert
2007-09-03 10:46
253 查看
如果平时我们要在Page中显示一个提示信息,通常会采用类似下面的方式:
Page.ClientScript.RegisterClientScriptBlock(typeof(this), "key1", "<script type=\"text/javascript\">window.alert(\"test\");</script>", true);
可是如果这段代码,放到一个包含UpdatePanel的页面,就有可能出现问题,因为UpdatePanel已经对http的输入输出作了处理,不允许手动向网页中额外添加内容,通常这个时候会给出一个异常。微软曾经给出一个清单,上面是和UpdatePanel不兼容的ASP.NET服务器控件列表,有很多也都是因为这个原因。但是同时微软也给出了另外一个函数,用于解决这个问题,就是ScriptManager.RegisterClientScriptBlock(),采用这个方法注册的javascript脚本和UpdatePanel就没有冲突了。
所以总结两种情况,写了下面的小函数:
public class WebMessageBox
{
public static void Show(string infomation, Control control)
{
if (StringHelper.IsNullOrEmpty(infomation))
{
throw new ArgumentException("没有设置要显示的信息");
}
bool isPage = (control is Page);
bool isUpdatePanel = (control is UpdatePanel);
if (!isPage && !isUpdatePanel)
{
throw new ArgumentException("信息只能输出到Page或者UpdatePanel中");
}
bool addScriptTags = true;
string script = string.Format("window.alert('{0}');", infomation);
string key = string.Format("WebMessageBox{0}", DateTime.Now.ToString());
Type registerType = typeof(WebMessageBox);
if (isPage)
{
Page page = control as Page;
page.ClientScript.RegisterClientScriptBlock(registerType, key, script, addScriptTags);
}
if (isUpdatePanel)
{
UpdatePanel updatePanel = control as UpdatePanel;
ScriptManager.RegisterClientScriptBlock(updatePanel, registerType, key, script, addScriptTags);
}
}
}
说明:
只要是在网页中提示信息这种情况,都可以直接调用这个函数,第二个参数注意一下就可以。
这不是一个完整的代码,有一个StringHelper.IsNullOrEmpty()是我自己写的代替string.IsNullOrEmpty的方法没有放上来。
script key的生成比较偷懒,不影响大局就没有修改。
之前想过把另外两种提示框(confirm和prompt)也放上来,后来发现逻辑上就不成立,实现不了类似Winform的那种效果,If(WebMessageBox.Show("input name", WebMessageBoxType.Prompt" == "admin") {},暂时作罢,以后可能会通过自定一个窗口实现这种效果。
只是一段小代码,没什么技术含量可言。。。^_^
Page.ClientScript.RegisterClientScriptBlock(typeof(this), "key1", "<script type=\"text/javascript\">window.alert(\"test\");</script>", true);
可是如果这段代码,放到一个包含UpdatePanel的页面,就有可能出现问题,因为UpdatePanel已经对http的输入输出作了处理,不允许手动向网页中额外添加内容,通常这个时候会给出一个异常。微软曾经给出一个清单,上面是和UpdatePanel不兼容的ASP.NET服务器控件列表,有很多也都是因为这个原因。但是同时微软也给出了另外一个函数,用于解决这个问题,就是ScriptManager.RegisterClientScriptBlock(),采用这个方法注册的javascript脚本和UpdatePanel就没有冲突了。
所以总结两种情况,写了下面的小函数:
public class WebMessageBox
{
public static void Show(string infomation, Control control)
{
if (StringHelper.IsNullOrEmpty(infomation))
{
throw new ArgumentException("没有设置要显示的信息");
}
bool isPage = (control is Page);
bool isUpdatePanel = (control is UpdatePanel);
if (!isPage && !isUpdatePanel)
{
throw new ArgumentException("信息只能输出到Page或者UpdatePanel中");
}
bool addScriptTags = true;
string script = string.Format("window.alert('{0}');", infomation);
string key = string.Format("WebMessageBox{0}", DateTime.Now.ToString());
Type registerType = typeof(WebMessageBox);
if (isPage)
{
Page page = control as Page;
page.ClientScript.RegisterClientScriptBlock(registerType, key, script, addScriptTags);
}
if (isUpdatePanel)
{
UpdatePanel updatePanel = control as UpdatePanel;
ScriptManager.RegisterClientScriptBlock(updatePanel, registerType, key, script, addScriptTags);
}
}
}
说明:
只要是在网页中提示信息这种情况,都可以直接调用这个函数,第二个参数注意一下就可以。
这不是一个完整的代码,有一个StringHelper.IsNullOrEmpty()是我自己写的代替string.IsNullOrEmpty的方法没有放上来。
script key的生成比较偷懒,不影响大局就没有修改。
之前想过把另外两种提示框(confirm和prompt)也放上来,后来发现逻辑上就不成立,实现不了类似Winform的那种效果,If(WebMessageBox.Show("input name", WebMessageBoxType.Prompt" == "admin") {},暂时作罢,以后可能会通过自定一个窗口实现这种效果。
只是一段小代码,没什么技术含量可言。。。^_^
相关文章推荐
- 可在多线程下TextBox中显示信息,和控制滚动的一个函数
- JQuery ajax 如何设置同步调用(同时只能触发一个函数) 解决与层显示信息时候的冲突问题
- 写了一个打印信息的函数比Alert强大,类似Firebug中的console.table
- 号)、sex(性别)、birthday(出生日期)、id(身份证号)等等。其中“出生日期”定义为一个“日期”类内嵌子对象。用成员函数实现对人员信息的录入和显示。要求包括:构造函数和析构函数、拷贝构造函
- 给出n个学生的考试成绩表,每条记录由学号、姓名和分数和名次组成,设计算法完成下列操作: (1)设计一个显示对学生信息操作的菜单函数如下所示: *************************
- 封装一个Win32弹出提示框的函数(用于Window控件 显示Tooltip)
- 编写一个手机类(Mobile),包括手机品牌(brand)、手机型号(type), 方法包括显示手机信息,并编写测试类进行对象的创建
- ShowPage 显示“上一页 下一页”等信息的封装代码
- updatepanel 中使用JS alert方法
- AJAX使用了UpdatePanel后无法使用alert弹出脚本
- 一个ASP.NET长文章分页显示函数
- 使用layer的alert函数完成根据post请求结果弹出一个提示,然后刷新本页面
- 一个模拟"显示桌面.scf"程序的JS小函数
- UpdatePanel与ASP.NET Page的缓存
- 一个遍历文件夹内容,显示文件名,大小等信息的MFC程序
- 用JAVASCIRPT写的一个动态显示日期的函数!
- ldd命令,查看依赖的动态库信息 nm命令可以列出一个函数库文件中的符号表
- EXTJS 4.2 实现 gridpanel 鼠标悬停单元格以提示信息的方式显示单元格内容。
- 最近在一个外网的网站,困扰了我多天的循环和大家分享下,也做为我以后工作之用.第一种(信息作用循环.实现方式后台时钟在前台循环滚动(左右)显示).
- 一个js简单的日历显示效果的函数