【发布时间】:2016-02-18 10:11:33
【问题描述】:
我对 ASP.NET 还很陌生,所以这肯定是由于我缺乏了解。
我遇到了一个同时设置了 OnClientClick 和 OnClick 的 ASP 按钮:
<asp:Content ID="Content2" ContentPlaceHolderID="mainContent" runat="Server">
<asp:UpdatePanel ID="upSendData" runat="server" UpdateMode="Conditional" RenderMode="Block">
...
</asp:UpdatePanel>
<asp:Button ID="btnSave" runat="server"
OnClientClick="if(!CanSave()){return false;}; DisableSaveButton();"
OnClick="btnSave_Click"
Text="<%$ Resources: btnSave %>"
CssClass="cmdFormButton"
UseSubmitBehavior="false"
Width="220px" />
</asp:Content>
OnClientClick 调用一个禁用按钮的 JS 函数,以避免用户不小心点击多次:
function DisableSaveButton() {
document.getElementById("<%=btnSave.ClientID %>").disabled = true;
}
然后代码隐藏OnClick 执行保存过程...但是如果出现故障,我想重新启用按钮。所以我这样做了:
protected void btnSave_Click(object sender, EventArgs e)
{
if (SaveData())
{
// Redirects to another page
}
else
{
btnSave.Enabled = true; // This is "true" already
}
}
但它不起作用。客户端代码在代码隐藏之前正确执行,并且按钮被禁用。但是如果我调试代码隐藏,btnSave.Enabled 已经返回true,并且它不会重新启用它。
我知道 ASP Enabled 属性和 HTML disabled 属性不一样,但我有点希望 ASP 知道如何处理。
另外,我不确定是否(或如何)可以从代码隐藏中访问 disabled 属性。
有什么想法吗?建议?提前致谢!
【问题讨论】:
-
你能确认一下当前的行为吗?该按钮在提交时被禁用,但在
SavaData() == false? 时未重新启用? -
这是一个完整的回帖还是有
UpdatePanel或类似的东西?触摸按钮背后的代码中是否还有其他方法? -
@user1429080 确实有一个
UpdatePanel。有一些代码隐藏方法会与按钮的Visible属性混淆,但不会与Enabled属性混淆。 -
我将编辑以向 asp 代码添加更多上下文
-
@user1429080 嗯,看起来按钮不在
UpdatePanel内,所以不确定它是否会影响这个