提交前asp.net按钮客户端确认

时间:2012-02-14 18:24:48

标签: javascript jquery asp.net

我遇到了这个问题:我需要验证文件是否尚未上传,我使用带有Jquery的webservice,由isAlreadyUploaded()调用,返回true或false。如果文件存在,则询问是否继续进行确认。那么,一旦完成,我想调用Button1_Click函数来完成操作。我的问题是他们两个人同时被召唤,从而避免了确认。

也许我正以错误的方式接近问题。如果是这样,请随时纠正我。

<asp:Button ID="Button1" runat="server" Text="Upload" onclick="Button1_Click" OnClientClick="return isAlreadyUploaded()" />

<script>
function isAlreadyUploaded() {

    var mystring = "";

    $.ajax({
        type: "POST",
        url: "Main.aspx/alreadyUploaded",
        data: "{'swfFile':'" + $("#<%=FileUpload2.ClientID%>").val() + "','flvFile':'" + $("#<%=FileUpload3.ClientID%>").val() + "'}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (msg) {

            mystring = msg.d;
            alert(mystring);
            if (mystring != "") {

                if (confirm(mystring)) {
                    return true;
                } else {
                    return false;
                }
            } else {
                return true;
            }
        }
    });        
}
</script>

3 个答案:

答案 0 :(得分:3)

如果添加以下选项,它应该有效:

$.ajax({
    /* ... code ...*/
    async : false,
    /* ... code ...*/
});

当您需要发出asynchronous请求时,您正在向服务器发出synchronous个请求。

http://api.jquery.com/jQuery.ajax/

答案 1 :(得分:1)

因为ajax本质上是异步isAlreadyUploaded不会等待服务器响应,因为您没有从isAlreadyUploaded返回任何内容,它将被视为true并且该按钮将提交形式。

您可以将ajax config的async属性设置为false,以便它在离开函数之前等待服务器响应。

function isAlreadyUploaded() {

    var mystring = "", retVal = false;

    $.ajax({
        async: false
        type: "POST",
        url: "Main.aspx/alreadyUploaded",
        data: "{'swfFile':'" + $("#<%=FileUpload2.ClientID%>").val() + "','flvFile':'" + $("#<%=FileUpload3.ClientID%>").val() + "'}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (msg) {

            mystring = msg.d;
            alert(mystring);
            if (mystring != "") {

                if (confirm(mystring)) {
                    retVal = true;
                } else {
                    retVal= false;
                }
            } else {
                retVal = true;
            }
        }
    });     

    return retVal;  
}

答案 2 :(得分:0)

ajax工具包中有一个ConfirmButtonExtender,可能就是你要找的东西。 以下是我发现的一个示例:http://www.asp.net/ajaxLibrary/AjaxControlToolkitSampleSite/ConfirmButton/ConfirmButton.aspx