<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().
,则停用有效
答案 0 :(得分:0)
为什么不使用html输入按钮(如果你不需要POSTBACK)?
答案 1 :(得分:0)
此问题是由Button类中AddAttributesToRender的行为引起的,与LinkButton不同。
当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以进行渲染以获得所需的行为。