ASP.NET按钮,仅在OnClientClick返回true时执行OnClick

时间:2012-12-03 07:58:29

标签: javascript asp.net web-services

我有一个看起来像的按钮:

<asp:Button ID="btnSave" runat="server" CssClass="SubmitButton" Text="Order >>" OnClientClick="return SaveChanges();" OnClick="btnSave_Click" />

javascript函数,如下所示:

function SaveChanges() {
    var success = false;

    var arr1 = new Array();
    var arr2 = new Array();
    var arr3 = new Array();
    for (var i = 0; i < self.frames.length-1; i++) {
        arr1[i] = document.getElementById("frame" + i.toString()).contentWindow.getFramePSFID();
        arr2[i] = document.getElementById("frame" + i.toString()).contentWindow.getFrameHeading();
        arr3[i] = document.getElementById("frame" + i.toString()).contentWindow.saveSvg();
    }

    Scripts.WebServices.WSCommon.SaveChanges(arr1, arr2, arr3, function (result) {
        return true;
    });
}

return true;所在的块,一旦Web服务调用(需要几秒钟)完成并返回结果,就会发生这种情况。无论我放在那里,btnSave_Click总是触发。 (如果我删除btnSave_Click并将return true;更改为alert('test');,则会触发警报。)。

一旦Web服务返回true,我需要做什么来强制btnSave_Click才能触发?

2 个答案:

答案 0 :(得分:0)

web服务调用中的

function是异步调用返回时要执行的回调方法。

但是你的SaveChanges方法不会等到那时。

我认为你可以做到这一点的方法是在你的webform中有一个隐藏字段或者在你的输入按钮中添加一个额外的(你自己的)属性..在回调方法中将它的值设置为一些有意义的值..之前调用webService检查此值..如果发现返回true,则调用webService并返回false。

还添加代码,在回调方法中使用jQuery或javascript单击按钮,而不是返回true ..

类似这样的事情

function SaveChanges() {

   //your array code..

    if (<check_your_hidden_field_value>){
        return true;
    }else{
        Scripts.WebServices.WSCommon.SaveChanges(arr1, arr2, arr3, function (result) {

            //set your hiddenfield data here..

            document.getElementById('<%= btnSave.ClientID %>').click();//click button
        });
        return false;
    }
}

答案 1 :(得分:-1)

如何对SaveChanges()进行一些调整:

function SaveChanges() {
    var success = false;

    var arr1 = new Array();
    var arr2 = new Array();
    var arr3 = new Array();
    for (var i = 0; i < self.frames.length-1; i++) {
        arr1[i] = document.getElementById("frame" + i.toString()).contentWindow.getFramePSFID();
        arr2[i] = document.getElementById("frame" + i.toString()).contentWindow.getFrameHeading();
        arr3[i] = document.getElementById("frame" + i.toString()).contentWindow.saveSvg();
    }

    Scripts.WebServices.WSCommon.SaveChanges(arr1, arr2, arr3, function (result) {
        success = true;
        btnSave_Click();
    });

    return success;
}