bug of jquery.linkselect.js in asp.net

卫胜
2023-12-01

今天公司另外一个项目组用的jquery.linkselect.js出了问题,问题描述如下:

1) 在一个用户控件上有两个dropdownlist,其中一个有postback事件,另外一个没有。

2) 在page load完成后点击页面上的一个按钮来为两个dropdownlist绑定值。

3) 在页面上将没有postback的dropdownlist的值选成非默认值

4) 在选择有postback的dropdownlist,触发它的postback事件

5) 服务器端得selectindexchange事件没有执行,完成回发后,页面上的两个dropdownlist值还原成默认值

 

问题原因:

因为asp.net在服务器端设置控件的value的时候是根据客户端的name属性来设置的(个人猜测,没有得到资料证实),但是由于jquery.linkselect.js post回去的name是错误的,所以导致asp.net不能正确的读取和设置viewstatu。所以出现了上面的问题。

 

解决:

将jquery.linkselect.js文件的第354行修改成

, '<input type="hidden" name="' + self.id.replace("_", "$") + '" id="' + self.id + '" value="' + value + '" />'

此行原为:

, '<input type="hidden" name="' + self.id + '" id="' + self.id + '" value="' + value + '" />'

 

附录:

asp.net客户端的id和name的关系是$和_,页面是最顶级,如页面上有控件A(id=cona),控件A中有控件B(id=conb),则A在客户端生成的

name=cona

id=conb

控件B在客户端生成的为

name=cona$conb

id=cona_conb

而jquery.linkselect.js post给服务器的name是和id一样的值,固有上面的问题。

 

完整代码如下:

 

后记:

当我把新的code给他们的时候,他们说问题没得解决,哎,郁闷啊,我在这边模拟的已经ok了,不晓得哪里还有问题,算了,不管了,谁叫我们是跨国开发呢,太远了……

 类似资料:

相关阅读

相关文章

相关问答