在禁用客户端后,无法获得ASP按钮以启用代码隐藏

问题描述:

我对ASP.NET很新,所以这肯定来自我的缺乏理解。在禁用客户端后,无法获得ASP按钮以启用代码隐藏

我遇到同时具有OnClientClickOnClick集的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属性,无论如何。

任何想法?建议?提前致谢!

+0

可以确认当前的行为。这个按钮在提交时被禁用,但当'SavaData()== false'时不能重新启用? –

+0

这是一个完整的帖子或有一个'UpdatePanel'或类似的参与?触摸按钮后面的代码中有其他方法吗? – user1429080

+0

@ user1429080的确有'UpdatePanel'。有一些代码隐藏方法混淆了按钮的“Visible”属性,但没有一个是“启用”的。 – almulo

我们终于设法解决了这个问题。和注册一个调用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,所以这是一个受过教育的猜测

+0

检查了'UseSubmitBehavior',它已经是'false'。尝试删除属性,但它不是开始。 'btnSave.Attributes'返回一个空集合。我将添加该问题的按钮的aspx代码。 – almulo

+0

什么是'!CanSave()'? – christiandev

+0

这是一个JS函数,用于检查数据是否有效,以避免发送保存请求到服务器,如果我们知道它不起作用。 如果'CanSave'返回'false',则按预期工作:按钮保持启用状态,并且不调用代码隐藏保存代码。 – almulo