3

asp.net 2.0 / jQuery / AJAX

<script type="text/javascript">
//updated to show proper method signature

var prm = Sys.WebForms.PageRequestManager.getInstance();

prm.add_endRequest(hideMessage);

function hideMessage(sender, args)
{
    var ctl = args.get_postBackElement();
    //check if ctl is the disired control
    //hide user notification message
}
</script>

我在页面上有几个控件可能会启动 AJAX 请求,但我只希望我的 js 在我单击一个特定按钮时触发。我如何检查发起请求的控件是什么,以便我可以相应地触发 JS。

编辑:我解决了它,但我仍然想知道我是否可以这样做。

澄清:我不能从 onclick 事件中调用 JS,因为页面在 UpdatePanel 内,我只希望 JS 在 AJAX 请求结束时执行,并且它是由页面上的一个特定按钮触发的。在服务器端,我将 myLabel.Text 设置为一些文本,然后 js 检查 $(myLabel.CliendID) 的 innerHTML 是否不为空并触发 js。检查 innerHTML 是我的解决方法,因为我不知道如何检查 AJAX 请求的“发件人”。希望这现在更有意义。

编辑2:我已经阅读了一些文档,结果你可以检查“发件人”控件。

谢谢你。

4

3 回答 3

7

这就是我在代码中所做的,以确定是什么控件初始化了请求。所有的 JavaScript 代码。

function pageLoad() {
    if (!Sys.WebForms.PageRequestManager.getInstance().get_isInAsyncPostBack()) {
        Sys.WebForms.PageRequestManager.getInstance().add_endRequest(endRequestHandler);
        Sys.WebForms.PageRequestManager.getInstance().add_initializeRequest(initializeRequest);
    }
}
function endRequestHandler(sender, args) {
    if (sender._postBackSettings.sourceElement.id == '<%= gvResults.ClientID %>')        {
        //do something because of this...
    }
}
function initializeRequest(sender, args) {
    if (CheckForSessionTimeout()) {
        args.set_cancel(true);
    }
    else {
        if (sender._postBackSettings.sourceElement.id == '<%= gvResults.ClientID %>') {
             //do something because of this
        }
    }
}

编辑
这是在客户端检查超时的方法。

var sessionTimeoutDateTime = new Date();
    var sessionTimeoutInterval = <%= this.SesstionTimeoutMinutes %>;

    function CheckForSessionTimeout() {
        var currentDateTime = new Date()
        var iMiliSeconds = (currentDateTime - sessionTimeoutDateTime);
        if (iMiliSeconds >= sessionTimeoutInterval) {
            ShowSessionTimeout();
            return true;
        }
        return false;
    }
于 2009-02-27T23:49:10.937 回答
0

我建议您不要让每个控件都执行相同的 javascript 函数。或者,如果他们这样做,则传递一个参数,指示哪个执行了它。

然后,您可以在控件执行的 js 函数中包含您的 ajax。

而且,如果我没有正确理解这个问题,也许你可以更详细地解释它或发布一些代码。

于 2009-02-27T21:40:13.837 回答
0

我已经阅读了一些文档,结果你可以检查“发件人”控件。问题中的 JS 已更新以显示正确的方法签名。

这篇文章给出了更好的解释。

于 2009-02-27T22:39:02.057 回答