.net弹窗的几种方式-轮子-问题反思

            //第一种
            Response.Write("<script language=javascript>alert('第一种弹出框');</" + "script>");
            //第二种
            Page.RegisterStartupScript("", "<script language='javascript'>window.alert('第二种弹出框');</script>");
            //第三种
            ClientScriptManager scriptManager = ((Page)System.Web.HttpContext.Current.Handler).ClientScript;
            scriptManager.RegisterStartupScript(typeof(string), "", "alert('第三种弹出框');", true);
            //第四种
            Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "<script language='javascript' defer>alert('第四种弹出框');</script>");
            //第五种,需要在引用中引用System.Windows.Forms
            MessageBox.Show("第五种弹窗")

这个是我自己创建的新项目,五种弹窗方法都可用,前几天我在几年前的老项目上使用第一种弹窗方式报错:“响应在上下文中不可用”,然后我在网上搜了一下,说是因为代码是在自定义类BaseClass.cs中定义的,如果你需要在你自己的类里调用Response,请用System.Web.HttpContext.Current.Response。
然后我改成了这种,但是又报错:“未将对象引用设置到对象的实例。”最后我直接用MessageBox.Show(“”),周末突然想到问题还没解决,于是我创建了一个新项目试了一下,文中五种方法均可成功弹窗,于是我打开老项目又试了一下发现还是报错,于是我把第一种弹窗方法写在加载页面的方法里,发现可以成功弹窗,那问题就出于自己写的类里面是不可以调用Response.Write(“

 protected void Ok_Click(object sender, EventArgs e)
        {
            //Response.Write("<script language=javascript>alert('第一种弹出框');</" + "script>"); 
            //Page.RegisterStartupScript("", "<script language='javascript'>window.alert('第二种弹出框');</script>"); 
            // ClientScriptManager scriptManager = ((Page)System.Web.HttpContext.Current.Handler).ClientScript;
            //scriptManager.RegisterStartupScript(typeof(string), "", "alert('第三种弹出框');", true); 
            //Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "<script language='javascript' defer>alert('第四种弹出框');</script>");

            //MessageBox.Show("第五种弹窗");
            this.Tan();
        }
        public void Tan()
        {
            Response.Write("<script language=javascript>alert('第一种弹出框');</" + "script>");
        }

那么问题就出在我写的定时器身上了,我在新项目里测试里一下,发现果然也报“未将对象引用设置到对象的实例。”在这可以考虑一下定时器的问题,但是定时器可以完美执行定时操作,且把弹窗代码换成MessageBox.Show(“第五种弹窗”)后可以成功执行定时弹窗操作,那明天调试一下定时器看一下是不是定时器出现了问题。那么第一个疑问暂时解决了,那么看一下第二个问题是哪里引起的。看如下代码:

 protected void Ok_Click(object sender, EventArgs e)
        {
            //Response.Write("<script language=javascript>alert('第一种弹出框');</" + "script>"); 
            //Page.RegisterStartupScript("", "<script language='javascript'>window.alert('第二种弹出框');</script>"); 
            // ClientScriptManager scriptManager = ((Page)System.Web.HttpContext.Current.Handler).ClientScript;
            //scriptManager.RegisterStartupScript(typeof(string), "", "alert('第三种弹出框');", true); 
            //Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "<script language='javascript' defer>alert('第四种弹出框');</script>");

            //MessageBox.Show("第五种弹窗");
            //this.Dsq();
            this.TU();
        }
        public void TU()
        {
            System.Web.HttpContext.Current.Response.Write("<script>alert('弹窗测试');</ script > ");
        }

这个情况下代码确实是没报错,但是出现了一个很奇怪的内容,就是我点击完弹窗后,不仅没弹窗按钮也在页面上消失了。然后报错是没有实例化,于是我实例化了一下:

            HttpContext context = HttpContext.Current;
            Response.Write("<script>alert('弹窗测试');</ script > ");

效果还是点击完按钮后,没有出现弹窗且按钮消失,这个时候我发现如果()里面的内容换成"

弹窗测试

"是可以成功显示在页面上字体的,那问题就只剩下是弹窗代码的问题了,经过测试确实是弹窗代码的问题,正确的应该是:
            HttpContext context = HttpContext.Current;
            Response.Write("<script language=javascript>alert('第一种弹出框');</" + "script>");

这样我们再返回去看一下是定时器的问题还是我们之前的弹窗代码写错了,出现了一个我们熟悉的错误,在上下文中不可用。这说明上文中报的错误只是没有实例化。那么排除了这个问题,就只剩下定时器的问题了。明天再测一下定时器吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晚风偷吻云朵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值