这是否是ASP.NET的缺陷?当TextBox的Changed事件和DropDownList的ChangedIndex事件同时发生时......

时间:2022-01-13 20:08:51
是这样的,我在页面上有三个控件:TextBox1、TextBox2、DropDownList,其中TextBox1有Changed事件并且已设AutoPostBack=true,TextBox2没有这个事件,DropDownList设置了AutoPostBack=true并且有ChangedIndex事件。我要做的操作是在TextBox1中添加一些东西并且不让其失去焦点,然后马上点击DropDownList(在点击时只要稍稍滞留一下),这时马上就会显示白页,页面上的所有控件都消失了。注意:这个页面不嵌套在框架中这样的现象不会发生,只有被嵌套到IFRAME中才会发生!请大家对此问题展开讨论,并给出解决方案!急急急!!

22 个解决方案

#1


你在TextBox1设置了AutoPostBack=true这里当TextBox1失出焦点就去提交到服务器重新读TextBox的原始数据,

#2


在changed跟ChangedIndex事件中加一句Response.Redirect("xx.aspx",true)试试!

#3


textbox失去焦点时候触发了textbox的changed事件。(也就是点击DropDownList时)
所以同时发生这两个事件了。
(我估计,没确认)

#4


最好有同一个事件控制,你可以用一个Button

#5


楼上说的应该差不多,textbox得AutoPostBack=true时,textbox的值改变后并不马上触发事件,而是在失去焦点后触发事件

#6


产生PostBack应该不会出现白页的问题啊
IFRAME没有试过, 在FRAMESET中page的postback没有出现过这样的事情.你试下就直接在IFRAME中点 提交的按钮 ,看看是否还会显示白页

#7


感觉客户端的脚本可能真的有问题,也可能服务器被你一下搞死了,呵呵

#8


我试过了,发现焦点离开textbox后,除了落在dropdownlist上会导致页面空白(无论有无SelectedIndexChanged事件)之外,落在其他控件上是正常的.
我认为这是一个bug,可以报告了

#9


按照你说的情况做了测试,一切正常。
不管是单独的页面还是嵌入在iframe中都正常

#10


to leal() 
奇怪,我这怎么没这个问题呢

#11


的确有这个问题,我也遇到过,应该是一个bug

#12


我也有这个问题,textbox 有了onchanged事件,AutoPostBack=true,输入内容后,接着去点dropdownlist (它也是AutoPostBack=true)时,页面就成了白页了,要在刷新才行,这样客户怎样能接受啊,其实在改变textbox地内容时先点击别的空白处后,就不会成白页,我是把dropdownlist地AutoPostBack=false 这样去避免成白页,但是这是治标不治本,谁有办法解决吗?

#13


我负责的项目马上就要结项了,可是这个BUG怎么也解决不了,这给我们造成了很大麻烦。甲方要求最多只能有两个问题可以遗留,所以我们还得继续想办法解决。请问,对这一问题大家可由解决方案?诚邀思归和孟子E章及快乐王子等大侠参加!!

#14


试试,
TextBox1.Attributes.Add("onchange", "");
TextBox1.Attributes.Add("onblur", "__doPostBack('TextBox1','');");

但也不是太稳定

#15


looks like a bug, try to the add the following to the end of your aspx file:

<script language=javascript>
function __doPostBack(eventTarget, eventArgument) {
var theform = document._ctl0;
theform.__EVENTTARGET.value = eventTarget;
theform.__EVENTARGUMENT.value = eventArgument;
                  setTimeout("document.forms[0].submit()",20);
//theform.submit();
}
</script>

#16


up

#17


我的也正常啊,找你的情况做了一遍

#18


用window.showModalDialog('frame.aspx', '', '');

frame.aspx里再包含 a.aspx(显示的内容), 这时会运行不太正常, 各位再试试看

延时的确是个好办法,用思归的方法, 我改进一下,(在前台页面改function __doPostBack(eventTarget, eventArgument)我没去试,不知会不会有效, 我对把AutoPostBack=true时生成的onchange事件进行重写:

TextBox1.Attributes.Add("onchange", 
        "setTimout(\"__doPostBack('TextBox1','');\", 20);");

试了几次, 的确很好用了, 

#19


谢谢,思归!谢谢,快乐王子!你们的方法兄弟我马上去试!!

#20


这个问题在我们的项目中也出现了,解决方法可以在TextBox失去焦点时在客户端转移到另外一控件中去,这样是可以避免白屏的,但个人感觉效果不是理想。

Text1.attritubs("onblur")="javascript document.all.TextCtrolFocus.focus()"

#21


换一个解决方案

有必要TextBox也搞AutoPostBack吗?

JavaScript在客户端不能暂存数据吗?

#22


思归,快乐王子,谢谢你们!!我的问题按照你们的方法已经得到了解决,项目也圆满的结束了,谢谢你们!同时也谢谢各位大侠的参与!!

#1


你在TextBox1设置了AutoPostBack=true这里当TextBox1失出焦点就去提交到服务器重新读TextBox的原始数据,

#2


在changed跟ChangedIndex事件中加一句Response.Redirect("xx.aspx",true)试试!

#3


textbox失去焦点时候触发了textbox的changed事件。(也就是点击DropDownList时)
所以同时发生这两个事件了。
(我估计,没确认)

#4


最好有同一个事件控制,你可以用一个Button

#5


楼上说的应该差不多,textbox得AutoPostBack=true时,textbox的值改变后并不马上触发事件,而是在失去焦点后触发事件

#6


产生PostBack应该不会出现白页的问题啊
IFRAME没有试过, 在FRAMESET中page的postback没有出现过这样的事情.你试下就直接在IFRAME中点 提交的按钮 ,看看是否还会显示白页

#7


感觉客户端的脚本可能真的有问题,也可能服务器被你一下搞死了,呵呵

#8


我试过了,发现焦点离开textbox后,除了落在dropdownlist上会导致页面空白(无论有无SelectedIndexChanged事件)之外,落在其他控件上是正常的.
我认为这是一个bug,可以报告了

#9


按照你说的情况做了测试,一切正常。
不管是单独的页面还是嵌入在iframe中都正常

#10


to leal() 
奇怪,我这怎么没这个问题呢

#11


的确有这个问题,我也遇到过,应该是一个bug

#12


我也有这个问题,textbox 有了onchanged事件,AutoPostBack=true,输入内容后,接着去点dropdownlist (它也是AutoPostBack=true)时,页面就成了白页了,要在刷新才行,这样客户怎样能接受啊,其实在改变textbox地内容时先点击别的空白处后,就不会成白页,我是把dropdownlist地AutoPostBack=false 这样去避免成白页,但是这是治标不治本,谁有办法解决吗?

#13


我负责的项目马上就要结项了,可是这个BUG怎么也解决不了,这给我们造成了很大麻烦。甲方要求最多只能有两个问题可以遗留,所以我们还得继续想办法解决。请问,对这一问题大家可由解决方案?诚邀思归和孟子E章及快乐王子等大侠参加!!

#14


试试,
TextBox1.Attributes.Add("onchange", "");
TextBox1.Attributes.Add("onblur", "__doPostBack('TextBox1','');");

但也不是太稳定

#15


looks like a bug, try to the add the following to the end of your aspx file:

<script language=javascript>
function __doPostBack(eventTarget, eventArgument) {
var theform = document._ctl0;
theform.__EVENTTARGET.value = eventTarget;
theform.__EVENTARGUMENT.value = eventArgument;
                  setTimeout("document.forms[0].submit()",20);
//theform.submit();
}
</script>

#16


up

#17


我的也正常啊,找你的情况做了一遍

#18


用window.showModalDialog('frame.aspx', '', '');

frame.aspx里再包含 a.aspx(显示的内容), 这时会运行不太正常, 各位再试试看

延时的确是个好办法,用思归的方法, 我改进一下,(在前台页面改function __doPostBack(eventTarget, eventArgument)我没去试,不知会不会有效, 我对把AutoPostBack=true时生成的onchange事件进行重写:

TextBox1.Attributes.Add("onchange", 
        "setTimout(\"__doPostBack('TextBox1','');\", 20);");

试了几次, 的确很好用了, 

#19


谢谢,思归!谢谢,快乐王子!你们的方法兄弟我马上去试!!

#20


这个问题在我们的项目中也出现了,解决方法可以在TextBox失去焦点时在客户端转移到另外一控件中去,这样是可以避免白屏的,但个人感觉效果不是理想。

Text1.attritubs("onblur")="javascript document.all.TextCtrolFocus.focus()"

#21


换一个解决方案

有必要TextBox也搞AutoPostBack吗?

JavaScript在客户端不能暂存数据吗?

#22


思归,快乐王子,谢谢你们!!我的问题按照你们的方法已经得到了解决,项目也圆满的结束了,谢谢你们!同时也谢谢各位大侠的参与!!