页面上的一个按钮不会调用后面的代码,其他按钮可以
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
。因此,更改此 属性 可能是您的另一种选择,但如果不是,请使用我提供的原始修复程序。
除了一个按钮,页面上的每个按钮都有效。单击它时,它会显示确认框。当它被确认为真时,它什么都不做。其他按钮在页面上工作,所以我不确定为什么没有调用后面的代码。
更新: 我需要确认此人想要按下按钮,这就是我拥有 "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
。因此,更改此 属性 可能是您的另一种选择,但如果不是,请使用我提供的原始修复程序。