一个小函数:在Page和UpdatePanel都能显示信息的Alert

如果平时我们要在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") {},暂时作罢,以后可能会通过自定一个窗口实现这种效果。
只是一段小代码,没什么技术含量可言。。。^_^

你可能感兴趣的:(update)