也许很多人看了这个标题就会不屑看下去,大可以说网上多的去了这种问题的文章,的确,当我碰到这个问题的时候,我也首先在网上找了很多资料,但是没有合适的,或者说没有讲的清晰的,而后,我又问了几个牛人,以及几位同事,也都没有搞懂,后来在我老大的帮助下,最终还是解决了,所以我觉得有这个必要写出来给大家分享下~
废话说了这么多,还是直奔主题吧~
我的要求是这样的,页面上有个表单,表单的内容是绑定数据库的,需要动态刷新的,而后有个按钮——save,点击之后为保存到数据库——Insert_Save(),又有个按钮submit,点击之后直接提交到数据库Insert_Submit(),两者的区别是插入到不同的表中,现在我要设计这个保存按钮,要求经过2个函数的判断,才能够执行insert,分别是Ckeck_Empty()以及Check_Formal(),即检测是否全填了和格式是否都正确,这两个方法都在后台完成了,现在的任务就是,在点击save按钮之后,需要弹出confirm选择框,“是否需要直接提交?”,如果点击“是”,则执行与submit按钮相同的操作,若否则进行save操作,那我如何才能把confirm的值保存下来呢?
很多人可能这么想:(因为要求在后台执行)
ScriptManager.RegisterStartupScript(
this.Page,
this.Page.GetType(),
this.ClientID,
"<script language=\"javascript\" type=\"text/javascript\" >
if(confirm('需要直接提交吗?'))
{
Insert_Save()
}
else
{
Insert_Submit()
}
</script>" ,
false);
然后再实际的操作当中,却发现了这个弹出框到了所以操作最后才执行,也就是说,我并没有执行所谓的询问操作而直接根据默认状态insert到数据库了,原因很简单,因为首先执行的是服务器端,然后才执行客户端~因此此方法不能解决.
而后,我又在网上看到了将返回值保存到session或者cookie的方法,原本应该是可以的,但是我上述几个函数都是需要传入其他参数(datarow,type_name等),因此如果使用session和cookie则这些传入参数将会取不到~
最后,实在没办法了,就只好去问老大,后来老大苦思冥想,终于想到个小窍门————通过隐藏按钮赋值的方法把confirm的返回值重新传到前台:即在页面上放一个隐藏按钮btn_hide,width设为0,visible设为false,然后将原本save的触发事件里confirm的返回值存到btn_hide.value中,然后将insert到数据库的操作放到btn_hide的触发事件中,将需要传入的dr以及type——name放在session中,即将数据库录入的操作存放在btn_hide_Click()中,也就是通过注册隐藏按钮事件的方法,来解决传值问题~
也许你不一定遇的到像我这种棘手的情况,但是也许你也会碰到,上述的方法并不是最佳的解决情况,一定有牛人有更好的方法解决,这里只是小白的拙见,但是也想贴出来和大家分享一下~一起进步~