0
votes
<asp:TemplateField HeaderText="Desc" ItemStyle-CssClass="btnDesc">
  <ItemTemplate>
    <asp:Button ID="btn_desc" runat="server" 
         Enabled="<%# ProcessDescButton() %>" 
         Text="<%# ProcessDescText() %>" 
         OnClientClick="ButtonDescAndNotesClick(this);return false;"  />
  </ItemTemplate>
  <HeaderStyle Width="6%" HorizontalAlign="Center" />
  <ItemStyle Width="6%" HorizontalAlign="Center" />
</asp:TemplateField>

This code when rendered in client does not show OnClientClick when ProcessDescButton() method returns FALSE. It only only shows OnClientClick if ProcessDescButton() it returns TRUE!

I have been through different posts regarding the same issue and replaced Enabled attribute of asp:Button to generic HTML attribute "DISABLED". That works but I need to enable and disable the button based on some logic implemented in ProcessDescButton().

I am not sure what to write to make the button enabled. Disabling works if i return "disabled" from ProcessDescButton().

2
what you want to do exactly? - cracker

2 Answers

0
votes

This issue is caused by the behavior of AddAttributesToRender in the Button class, and is different than a LinkButton.

When Enabled = False, the value of OnClientClick is effectively ignored, and not rendered to the client.

One option is to disable the button using javascript in document.load on the client.

Page_PreRender(object sender, EventArgs e)
{
  string script = @"document.getElementById('{0}').disabled = false;";
  script = string.Format(script, btnTest.ClientID);
  Page.ClientScript.RegisterStartupScript(GetType(), "btnTest_Disable", script, true);
}

If you're going to be doing a lot of that. I'd recommend sub-classing Button and overriding AddAttibutes to render to get the behavior you want.

0
votes

Why don't you use html input button (if you don't need a POSTBACK)?