asp.net 确认对话框与数据验证控件的冲突问题

来源:互联网 发布:程序员好,还是金融好 编辑:程序博客网 时间:2024/04/27 16:32

 当一个网页中既有数据验证控件,又有一个按钮在点击时出现提示按钮。

如果直接在页面的后台代码的Page_Load函数中写入btn.Attributes["Onclick"] = "return confirm('确定要保存数据?')",那么验证控件就会失效,因为验证控件也是通过js实现的,这样的话return confirm('确定要保存数据?')先于原来的js代码执行,提前返回了,于是验证控件失去了作用。

Html生成的源码如下:

<input type="submit" name="ctl00$ContentPlaceHolder1$bt_save" value="保存数据" onclick="return confirm('确定要保存数据吗?');WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(&quot;ctl00$ContentPlaceHolder1$bt_save&quot;, &quot;&quot;, true, &quot;&quot;, &quot;&quot;, false, false))" id="ctl00_ContentPlaceHolder1_bt_save" />

 

一开始我错认为把return去掉就可以了,后来发现这样是不行的,原因是没有return的值,确认框也就没有了作用,不管是确定还是取消,都会执行后台代码。

然后我们重新分析一下,这几段代码的实现。

 

1.我们在后台中加入的Onlick事件的代码默认加到数据验证js方法的前面。

2.我们需要confirm的return值。

3.不能在验证控件的js方法调用前返回。

 

第2,3条已经没有办法改变了,只能在第一条上突破,于是我将Html中生成的验证控件js方法的调用代码也加到后台中,并且放到return confirm()之前,这样就能保证我们的功能了:

后台代码如下:t_save.Attributes["OnClick"] = "WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions('ctl00$ContentPlaceHolder1$bt_save', '', true, '', '', false, false));return confirm('保存吗?')" ;

(注意此处必须将html中的&quot都替换为 ‘ );

这样做之后,html生成的代码变成了:

<input type="submit" name="ctl00$ContentPlaceHolder1$bt_save" value="保存数据" onclick="WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions('ctl00$ContentPlaceHolder1$bt_save', '', true, '', '', false, false));return confirm('保存吗?');WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(&quot;ctl00$ContentPlaceHolder1$bt_save&quot;, &quot;&quot;, true, &quot;&quot;, &quot;&quot;, false, false))" id="ctl00_ContentPlaceHolder1_bt_save" />

显然验证控件js方法调用了两次,但在第二次之前我们就已经return 了,所以没关系;

 

以上是我在很无奈的时候想到的办法,如果有哪位高人还有其他好的解决方案,希望多多指教

 


原创粉丝点击