如何防止 ASP.NET LinkButton 的回发

3

ASP:

<asp:LinkButton ID="lbSave" OnClick="lbSave_Click" runat="server">Save</asp:LinkButton>

HTML:

<a id="ContentMain_lbSave" href="javascript:__doPostBack(&#39;ctl00$ContentMain$lbSave&#39;,&#39;&#39;)">Save</a>

代码后置文件:

public void lbSave_Click(object sender, EventArgs e)
    {
        if (strP != "")
        {
            ScriptManager.RegisterStartupScript(this.Page, typeof(Page), "DiffUser", "showDiffUser();", true);
        }
        else
        {
            //do something else...
        }
    }

JQuery:

function showDiffUser() {
    $("#dvHide").fadeIn("slow");
    $("#backOverlay").fadeIn("slow");
}

当我点击按钮时,希望页面不会进行 postback 并运行 JQuery 函数。相反,当我点击链接时,它会刷新页面,然后执行 JQuery 函数。
如何防止 postback?
我尝试了以下方法:onClientClick='javascript:void(0);' 但这并不能执行 JQuery 函数。

可能是禁用<ASP:LinkButton>的PostBack的重复问题。 - Burgi
3个回答

3
尝试
OnClientClick="return false;"

更新:

OnClientClick="showDiffUser();return false;"

showDiffUser(); 调用JS方法

return false; 防止页面回发


我尝试过了,但是当我点击链接时,什么也没有发生。 - SearchForKnowledge
谢谢。我遗漏了一些信息并更新了我的问题。因为我正在进行if/else检查,所以必须通过代码后台调用函数。 - SearchForKnowledge
当你想要在服务器端执行某些操作时,你需要进行一次回发(postback)或使用ajax。 - fubo
听起来是个好主意。请给我一些开始的信息 :) 谢谢。 - SearchForKnowledge
这篇帖子似乎符合您的需求:https://dev59.com/hWMl5IYBdhLWcg3wp4Wk - fubo

2

只有在单击按钮后,您才会将jQuery函数调用添加到页面中。当然,如果您抑制了单击回发,则函数调用永远不会到达页面并且永远不会被执行。

但是,您想要的是先调用此函数,然后再抑制,对吧?因此,请执行以下操作:

OnClientClick="showDiffUser(); return false;"

现在你不再需要服务器端的点击处理程序了。


谢谢您的回复。我需要像更新后的问题中所示的那样进行服务器端调用。请给予建议。 - SearchForKnowledge
@SearchForKnowledge,嗯,现在有点困惑了。所以你是想完全禁用postback还是不想禁用?目前的情况是有时候你希望它发生,但并非总是如此。 - Andrei
所以当页面加载时,strP被赋予一个值。如果它为空,则执行JQuery,否则不执行。strP是一个服务器端变量。我知道我让问题更加混淆了。 - SearchForKnowledge

1
如果您不想引起页面回发,不要使用 .Net 的 LinkButton,而是使用标准的HTML超链接,并使用jQuery来捕获事件:
<a id="my-link">Save</a>

<script>
$(function () {
   $("#my-link").click(function () {
      showDiffUser();
   });
})
</script>

在同一个调用中,您可以进行AJAX调用以提高服务器端验证:
<script>
$(function () {
   $("#my-link").click(function () {
      // AJAX Call
        $.ajax({
            type: "post",
            url: "your-url",
            success: function (returnData) {
                showDiffUser();
            }
        });
   });
})
</script>

服务器端需要执行以检索变量值。不幸的是,这是我的问题 :/ - SearchForKnowledge
我已经编辑过了,包括一个 AJAX 调用,您可以将变量传回。如果失败,您始终可以在 UpdatePanel 中包装 LinkButton 以抑制 postback。 - Matt
那么我如何更改LinkButton代码和代码后台呢?顺便感谢您的澄清。 - SearchForKnowledge

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接