OnClientClick AJAX完成后点击OnClick

时间:2017-11-03 14:16:09

标签: asp.net ajax onclick jsonp onclientclick

我使用ASP.Net并且需要在JavaScript函数完全完成后调用服务器端函数

问题是它在客户端代码完成之前执行服务器代码并且我的隐藏值为空。 AJAX调用跨域,因此使用 async:false 似乎无法正常工作。

我已经添加了下面的基本代码来解释一下。

HTML

<input id="hdnToken" type="hidden" name="hdntoken" value="" />
<asp:Button ID="btnSubmit" Text="Submit" OnClientClick="return getToken();" OnClick="btnSubmit_Click" runat="Server"></asp:Button>

的JavaScript

function getToken() {
    $.ajax({
        async: false, // Ignored across domains
        method: "POST",
        contentType: "application/json; charset=utf-8",
        dataType: "jsonp",
        success: OnSuccess,
        error: OnError
    });

    function OnSuccess(response) {
        $('#hdnToken').val(response);
        return true;
    }

    function OnError(response) {
        console.log(response);
        return false;
    }
};

ASP.Net服务器端代码

protected void btnSubmit_Click(object sender, EventArgs e)
{
    var hidden = Request.Form["hdnToken"];
}

1 个答案:

答案 0 :(得分:1)

一个简单的技巧是在页面上放置一个没有文本但是有OnClick事件的LinkBut​​ton。

<asp:LinkButton ID="LinkButton1" runat="server" OnClick="LinkButton1_Click"></asp:LinkButton>

然后,您可以使用UniqueID

模拟该链接的PostBack
<script type="text/javascript">
    function simulateClick() {
        __doPostBack('<%= LinkButton1.UniqueID %>', '');
    }
</script>

现在运行simulateClick()时,它会触发后面代码中的LinkButton1_Click方法。

通过放置虚拟LinkBut​​ton,您不需要禁用enableEventValidation