首页 新闻 搜索 专区 学院

高分求高手帮解决一个问题,关于UpdatePanel控件。

0
悬赏园豆:100 [已解决问题] 解决于 2010-03-20 09:00
<p style="margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto;">我用了一个JQ验证插件,然后表单我用的VS2008自带的AJAX控件。结果我测试发现,提交按钮只要放到UpdatePanel控件里面JQ表单验证插件就失效。我试了两个插件都是这样。</p> <p style="margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto;">提交按钮放到UpdatePanel控件里面,点击提交的时候,验证插件失效了。。</p>
87Super的主页 87Super | 初学一级 | 园豆:107
提问于:2010-03-18 17:52
< >
分享
最佳答案
0

这个问题,我遇到过,JQ验证插件就需要绑定事件的(从firefox中可以看到,就算是页面第一次加载的时候,UpdatePanel里面的数据也是异步加载的),所以当你将JQ验证插件放到了UpdatePanel控件里面之后,在异步刷新之后,JQ插件原来绑定的事件啥的,都失效了,所以需要在每次异步调用再重新绑定一下,才能起作用。具体的解决方法是添加一个UpdatePanelAnimationExtender控件,然后在它的onupdated()方法中,重新注册事件。以前我也是用UpdatePanel控件做异步调用的,不过不好使,直接用JQ的ajax功能,就好来,绑定事件都很好弄。页面也比较清爽。

收获园豆:70
ForFreeDom | 小虾三级 |园豆:589 | 2010-03-19 10:13
我去试试,哈哈。
87Super | 园豆:107 (初学一级) | 2010-03-19 11:13
UpdatePanelAnimationExtender控件,貌似VS08没有自带,得去下载一个。
87Super | 园豆:107 (初学一级) | 2010-03-19 11:19
大哥你有MSN吗,或者Email
87Super | 园豆:107 (初学一级) | 2010-03-19 11:42
$(document).ready(function() { $("#form1").validationEngine({ promptPosition: 'centerRight' }) }) 这个是JS的方法
87Super | 园豆:107 (初学一级) | 2010-03-19 11:53
直接用JQ的ajax功能,就好来,绑定事件都很好弄。页面也比较清爽。 我现在赶时间,图快,要不然手写了。哎。
87Super | 园豆:107 (初学一级) | 2010-03-19 12:02
@87Super:seekarmor@yahoo.com.cn
ForFreeDom | 园豆:589 (小虾三级) | 2010-03-19 12:02
@87Super: 总之,得在页面添加一个js方法,在UpdatePanel里面的数据异步加载以后,重新为JQ验证插件绑定事件,就可以了。以前我是在vs2005中搞的。
ForFreeDom | 园豆:589 (小虾三级) | 2010-03-19 12:06
@87Super: 在updatepanel中用ScriptManager.RegisterStartupScript(UpdatePanel1,typeof(UpdatePanel),"scriptName", @"$("#form1").validationEngine({ promptPosition: 'centerRight' }) ",true); 注册一下,试试
ForFreeDom | 园豆:589 (小虾三级) | 2010-03-19 12:30
试过了,这种方法不行,搞了两天了,用微软的这个AJAX控件,实在是没办法客户端验证。
87Super | 园豆:107 (初学一级) | 2010-03-19 13:21
@87Super: 你搜一下updatepanel注册js,看一下,有没有想要的结果。如果实在不行,就想下别的方案吧。
ForFreeDom | 园豆:589 (小虾三级) | 2010-03-19 13:45
@87Super: 看一下这个http://www.jb51.net/article/12494.htm,的第四部分,一定会对你帮助的
ForFreeDom | 园豆:589 (小虾三级) | 2010-03-19 14:22
@ForFreeDom: window.onload事件已过,除非你刷新(可你不想刷新),不然没人帮你触发。   谁来触发?微软帮我们准备好了。你要的大概就是这个了,数据更新前后都是一个事件触发。我们可以围绕着这两个事件为控件做点事情。这个状态适合于数据取到后就立马触发的需要。 Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(BeginRequestHandler);  Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);  function BeginRequestHandler(sender, args)  {  var elem = args.get_postBackElement();  ActivateAlertDiv('visible', 'AlertDiv', elem.value + ' processing');  }  function EndRequestHandler(sender, args)  {  ActivateAlertDiv('hidden', 'AlertDiv', '');  }  function ActivateAlertDiv(visstring, elem, msg)  {  var adiv = $get(elem);  adiv.style.visibility = visstring;  adiv.innerHTML = msg;  } 详细出处参考:http://www.jb51.net/article/12494.htm
ForFreeDom | 园豆:589 (小虾三级) | 2010-03-19 14:23
大哥,这个我看过了,但是。。。我一直引用不到Sys.WebForms.PageRequestManager这个类。。。
87Super | 园豆:107 (初学一级) | 2010-03-19 14:35
上面的这个代码是不是写在前台的JS里面??
87Super | 园豆:107 (初学一级) | 2010-03-19 15:10
我搞出来了。 add_beginRequest是在触发时发生的事件, add_endRequest是在触发后发生的事件, 我现在想要一个,触发前的。。。
87Super | 园豆:107 (初学一级) | 2010-03-19 15:21
<script type="text/javascript"> //<![CDATA[ Sys.WebForms.PageRequestManager.getInstance().add_initializeRequest(InitializeRequest); Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(BeginRequestHandler); Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler); function BeginRequestHandler(sender, args) { /*var elem = args.get_postBackElement(); ActivateAlertDiv('visible', 'AlertDiv', elem.value + ' processing');*/ //alert('BeginRequestHandler'); } function EndRequestHandler(sender, args) { /*ActivateAlertDiv('hidden', 'AlertDiv', '');*/ //alert('EndRequestHandler'); } function InitializeRequest(sender, args) { // $(document).ready(function() { // $("#form1").validationEngine({ promptPosition: 'centerRight' }) // }) // $("#form1").validationEngine({ promptPosition: 'centerRight' }) //alert('InitializeRequest'); } function ActivateAlertDiv(visstring, elem, msg) { /*var adiv = $get(elem); adiv.style.visibility = visstring; adiv.innerHTML = msg;*/ } //]]> </script>
87Super | 园豆:107 (初学一级) | 2010-03-19 15:33
其他回答(2)
0

没具体测试过你说的这样子的情况。不过按一般的操作来说的话,出问题的可能会是 jQuery验证插件和UpdatePanel控件本身之间操作冲突。jQuery的插件对表单的验证一般都需要接管form表单,而同样UpdatePanel控件也会接管他所在的form表单,这样子的话就会出现有两个接管表单的程序会同时占用同一个表单,所以验证操作会出现异常。

而提交按钮也一样,他只有在他当前的验证表单域中是有效的,而且使用jQuery验证插件进行验证时,在页面加载完成时会对当前验证的表单进行接管,举个简单的例子就是,在ID属性为form1的表单中你使用了jQuery的验证插件,哪么在页面加载后,jQuery验证插件会对form1的表单进行接管,此时的所有的操作都会被jQuery验证插件接管。而按照你说的,如果把提交按钮放在UpdatePanel控件中,那此时该提交按钮就会被UpdatePanel控件控件接管了。

个人理解啊!不一定是对的,但欢迎讨论。

收获园豆:15
西越泽 | 园豆:10713 (专家六级) | 2010-03-18 20:56
卡索大侠?那么如何解决这个问题呢???
支持(0) 反对(0) 87Super | 园豆:107 (初学一级) | 2010-03-18 23:00
0
     $("form").validationEngine();
        Sys.WebForms.PageRequestManager.getInstance().add_initializeRequest(function(sender, args){args.set_cancel($.validationEngine.isError);});
收获园豆:15
查尔斯 | 园豆:3832 (老鸟四级) | 2010-03-19 00:09
高人能具体点吗?
支持(0) 反对(0) 87Super | 园豆:107 (初学一级) | 2010-03-19 11:13
查大侠,我找了半天没找到,这个命名空间在哪里。。。
支持(0) 反对(0) 87Super | 园豆:107 (初学一级) | 2010-03-19 13:50
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册