【问题标题】:Fire OnClick after OnClientClick AJAX has finishedOnClientClick AJAX 完成后触发 OnClick
【发布时间】:2018-04-16 07:27:42
【问题描述】:

我正在使用 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"];
}

【问题讨论】:

    标签: asp.net ajax onclick jsonp onclientclick


    【解决方案1】:

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

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

    然后您可以使用UniqueID 模拟来自该链接的回发

    <script type="text/javascript">
        function simulateClick() {
            __doPostBack('<%= LinkButton1.UniqueID %>', '');
        }
    </script>
    

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

    通过放置一个虚拟的 LinkBut​​ton,您无需禁用 enableEventValidation

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-14
      • 1970-01-01
      • 2013-10-09
      • 1970-01-01
      • 2013-03-21
      • 1970-01-01
      • 1970-01-01
      • 2023-04-06
      相关资源
      最近更新 更多