日期:2014-05-17  浏览次数:20413 次

有关__DOPOSTBACK
页面都有个__DOPOSTBACK客户端方法,用于回送数据至服务器。里面有两个参数,一个是EVENTTARGET,一个是EVENTARGUMENT。
我看了一下别人写的自定义控件。通过这个方法触发后台事件。EVENTTARGET传递控件名称。
第二个通常都空着。

我现使用一个下拉框ddlTest来(下拉框的AutoPostBack=False)验证一下FORM.SUBMIT();事件是这样写的。
onchange="javascript:btnClick();"

function btnClick()
{
  __DoPostBack("ddlTest","")
}

1. 在服务端有OnSelectedIndexChange事件代码。 结果选择下拉项值,也会触发OnSelectedIndexChange事件.为什么?
2.在服务端我再加一个ddlTest_OnTextChange事件代码.这时选择下拉项值,触发的是ddlTest_OnTextChange事件,而不是OnSelectedIndexChange事件代码。为什么?

其实上面说了这么多,我最终目前的是如何使用FORM.SUBMIT()页面提交的方式实现事件的调用?
因为我做的一个控件要加多个事件。 如何实现?

------解决方案--------------------
探讨
2.在服务端我再加一个ddlTest_OnTextChange事件代码.这时选择下拉项值,触发的是ddlTest_OnTextChange事件,而不是OnSelectedIndexChange事件代码。为什么?

------解决方案--------------------
首先JS是区分大小写的,你看下页面上生成的是大写的吗?另外并且所非的控件都通过此方式submit
1.为什么会触发,看下面的判断,只要onsubmit()没有return false就提交了
JScript code

function __doPostBack(eventTarget, eventArgument) {
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
        theForm.__EVENTTARGET.value = eventTarget;
        theForm.__EVENTARGUMENT.value = eventArgument;
        theForm.submit();
    }
}
//theForm.__EVENTTARGET是ASP.Net生成的一个隐藏域

------解决方案--------------------
最全面的参考,点此