2011-06-09 51 views

回答

2

如果你只是处理表单的提交事件,你不一定会捕获每个__doPostBack()。例如,触发UpdatePanel刷新的__doPostBack()不会提交表单。你能确保你知道每次调用__doPostBack()

一种方法是重新定义它:

var oldDoPostBack = __doPostBack; 

function __doPostBack(eventTarget, eventArgs) { 
    // Your code here, which will execute before __doPostBack, 
    // and could conditionally cancel it by returning false. 

    oldDoPostBack(eventTarget, eventArgs); 
} 

只是一定要做到这一点靠近页面末尾或在的document.ready类型的事件,所以你可以肯定__doPostBack是在你尝试这个时定义的。

+0

谢谢,这就是我想要的。 – nima 2011-06-10 08:08:41

+0

只需注意...... asp:按钮控件呈现为“提交”按钮,不要调用__doPostBack。 – Riko 2011-12-02 15:43:02

+0

@Riko:这是一个很好的观点。一种减轻按钮控制的方法是将其UseSubmitBehavior属性设置为false。然后,他们将在其提交元素的onclick处理程序中的__doPostBack()脚本中呈现。 – 2011-12-02 16:30:28

-1

每个aspx页面上都有一个javascript __doPostBack()方法,由ASP.NET生成。所以你可以使用它

+0

是的,但我怎么让__doPostBack()运行我的代码。 – nima 2011-06-09 08:56:15

1

asp.net的工作方式是整个页面是一种形式。因此,在提交表单之前(这是回发事件的真正原因),我需要附加表单提交事件,返回false以防止提交表单,执行客户端代码,然后提交使用JavaScript形式。

您可以使用jQuery很容易地做到这一点:http://api.jquery.com/submit/

让我知道如果你需要更多的帮助。

+0

“表单提交事件”是什么意思? – nima 2011-06-09 10:19:48

+0

哦,明白了。但是当我返回false时,其余的代码不会被执行。 – nima 2011-06-09 10:34:35

+0

我用这个: $(“#myForm”)。submit(function(){ alert(“Submitting ...”); }); 无论如何感谢:) – nima 2011-06-09 10:36:35

1

Dave Ward的回答几乎适用于我,但无论出于何种原因(Telerik?),它创建了对__doPostBack调用的无限循环。所以相反,我用下面的代码:

function __doPostBack_Custom(eventTarget, eventArgs) { 
    // Your code here, which will execute before __doPostBack, 
    // and could conditionally cancel it by returning false. 

    oldDoPostBack(eventTarget, eventArgs); 
} 
var oldDoPostBack = window.__doPostBack; 
window.__doPostBack = __doPostBack_Custom;