页面上的一个按钮不会调用后面的代码,其他按钮可以

One button on the page will not call the code behind, other buttons work

除了一个按钮,页面上的每个按钮都有效。单击它时,它会显示确认框。当它被确认为真时,它什么都不做。其他按钮在页面上工作,所以我不确定为什么没有调用后面的代码。

更新: 我需要确认此人想要按下按钮,这就是我拥有 "onclientclick" 属性的原因。

这个按钮不起作用:

<asp:Button ID="btnDeclineServices" runat="server" Text="Purge Scanned Image" UseSubmitBehavior="false"  CssClass="redinput" TabIndex="-1" OnClientClick="return confirmDeclineServices();" OnClick="btnDeclineServices_Click" style="cursor:pointer;"/>

这是调用的代码:

protected void btnDeclineServices_Click(object sender, EventArgs e)
{
    ...
}

这是 onclientclick 的 Javascript 函数:

function confirmDeclineServices() {
if (confirm('Are you sure you want this flyer set to Declined Services?')) {
    return true;
} else {
    return false;
}
}

当我按下按钮时,它会显示确认对话框,当我按下确定时,它什么也不做。

非常令人困惑,因为紧挨着它的按钮确实有效:

<asp:Button ID="btnEnterFlyerData" runat="server" Text="Enter Flyer Data" UseSubmitBehavior="false" TabIndex="201" OnClick="btnEnterFlyerData_Click" style="cursor:pointer;" />

谢谢你能给我的任何帮助。

看起来您的第一个按钮有 OnClientClick="return confirmDeclineServices();",它应该 运行 客户端浏览器上的一些脚本。根据 MSDN,该属性也选择了标准的 OnClick 事件。

这是一个简单而快速的修复,如下所述。

您需要将 ClientClick 值更改为下面给出的值。我假设当 confirmDeclineServices 方法 return 为假时,您不想执行 code-behind.

所以如果用户确认是,那么你让正常的处理在ASP.Net中进行。现在,您总是从客户端点击方法 returning,然后停止与此按钮连接的所有 ASP.Net client-side 处理。

OnClientClick="var go = confirmDeclineServices(); if(go === false) { return false;}"

当常规 ASP.Net 处理接管 client-side 时,只有那时页面 post 返回并执行 code-behind。通过使用 return 语句,您将停止此过程。因此,当您希望按钮不返回 post 时,仅使用 return 值。

更新 1

让我再详细解释一下。

假设您有一个带有如下标记的 asp 按钮。它最终将在您的浏览器中呈现在下面第二个代码片段中的 html 。我说的ASP.Netclient-side处理就是在clientclick代码执行完后ASP.Net调用这个方法__doPostBack('btn1','')

因此,如果您在 clientclick 中 return,则 ASP.Net 方法不会执行并且不会发生 post 返回。

ASP.Net 按钮标记

   <asp:Button ID="btn1" runat="server" Text ="Button1"
    UseSubmitBehavior="false" OnClientClick="var x =1;"  OnClick="btn1_Click"/>

ASP.Net 按钮呈现 Html

<input type="button" name="btn1" value="Button1"
    onclick="var x =1;__doPostBack('btn1','')" id="btn1">

如果您将 UseSubmitBehavior 设置为 true,那么您的原始代码应该可以工作,但您似乎正在使用 UseSubmitBehavior = false。因此,更改此 属性 可能是您的另一种选择,但如果不是,请使用我提供的原始修复程序。