在禁用客户端后,无法获得ASP按钮以启用代码隐藏
我对ASP.NET很新,所以这肯定来自我的缺乏理解。在禁用客户端后,无法获得ASP按钮以启用代码隐藏
我遇到同时具有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
属性,无论如何。
任何想法?建议?提前致谢!
我们终于设法解决了这个问题。和注册一个调用JS函数的脚本一样“容易”,以便从后面的代码中启用客户端按钮。
CS:
protected void btnSave_Click(object sender, EventArgs e)
{
if (SaveData())
{
// Redirects to another page
}
else
{
ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(),
"showSaveButtons_" + this.ClientID, "EnableSaveButton();", true);
}
}
ASPX:
function EnableSaveButton() {
document.getElementById("<%=btnSave.ClientID %>").disabled = false;
}
您可以修改的属性...
else
{
btnSave.Enabled = true; // This is "true" already
btnSave.Attributes.Remove("disabled");
}
此外,您还需要申请UseSubmitBehavior="false"
到按钮的``后面的代码被称为
<asp:Button ID="btnSave" UseSubmitBehavior="false"
runat="server" Text="Button" OnClick="btnSave_Click"
OnClientClick="DisableSaveButton();" />
这是一个几年以来,我已经使用WebForms,所以这是一个受过教育的猜测。
检查了'UseSubmitBehavior',它已经是'false'。尝试删除属性,但它不是开始。 'btnSave.Attributes'返回一个空集合。我将添加该问题的按钮的aspx代码。 – almulo
什么是'!CanSave()'? – christiandev
这是一个JS函数,用于检查数据是否有效,以避免发送保存请求到服务器,如果我们知道它不起作用。 如果'CanSave'返回'false',则按预期工作:按钮保持启用状态,并且不调用代码隐藏保存代码。 – almulo
可以确认当前的行为。这个按钮在提交时被禁用,但当'SavaData()== false'时不能重新启用? –
这是一个完整的帖子或有一个'UpdatePanel'或类似的参与?触摸按钮后面的代码中有其他方法吗? – user1429080
@ user1429080的确有'UpdatePanel'。有一些代码隐藏方法混淆了按钮的“Visible”属性,但没有一个是“启用”的。 – almulo