OnClientClick javascript不会为asp禁用按钮呈现

时间:2014-08-22 09:56:37

标签: javascript asp.net onclientclick

<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>

当ProcessDescButton()方法返回FALSE时,在客户端呈现时此代码不显示OnClientClick。它只显示OnClientClick,如果ProcessDescButton()它返回TRUE!

我在同一问题上经历了不同的帖子,并将asp:Button的Enabled属性替换为通用HTML属性“DISABLED”。这有效,但我需要根据ProcessDescButton()中实现的一些逻辑启用和禁用按钮。

我不确定要启用按钮要写什么。如果我从"disabled"

返回ProcessDescButton().,则停用有效

2 个答案:

答案 0 :(得分:0)

为什么不使用html输入按钮(如果你不需要POSTBACK)?

答案 1 :(得分:0)

此问题是由Button类中AddAttributesToRender的行为引起的,与LinkBut​​ton不同。

当Enabled = False时,OnClientClick的值被有效忽略,并且不会呈现给客户端。

一个选项是在客户端上使用document.load中的javascript禁用该按钮。

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);
}

如果你要做很多事情。我建议对Button进行子类化并覆盖AddAttibutes以进行渲染以获得所需的行为。