0
<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。它仅在 ProcessDescButton() 返回 TRUE 时才显示 OnClientClick!

我浏览过关于同一问题的不同帖子,并将 asp:Button 的 Enabled 属性替换为通用 HTML 属性“DISABLED”。这可行,但我需要根据 ProcessDescButton() 中实现的一些逻辑来启用和禁用按钮。

我不确定要写什么来启用按钮。如果我"disabled"ProcessDescButton().

4

2 回答 2

0

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

于 2014-08-22T10:28:11.823 回答
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 以呈现以获得您想要的行为。

于 2014-10-20T16:27:50.387 回答