【问题标题】:OnClientClick javascript does not rendered for asp disabled buttonOnClientClick javascript 不会为 asp 禁用按钮呈现
【发布时间】:2014-08-22 09:56:36
【问题描述】:
<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() 中实现的一些逻辑来启用和禁用按钮。

我不确定要写什么来启用按钮。如果我从ProcessDescButton(). 返回"disabled",则禁用有效

【问题讨论】:

  • 你到底想做什么?

标签: javascript asp.net onclientclick


【解决方案1】:

此问题是由 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 以呈现以获得您想要的行为。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 我不需要 apostback ,但是按钮文本是通过服务器端方法呈现的。
    • 使用onclick估计会渲染
    • 但是不能用ClientClick调用客户端方法!!
    猜你喜欢
    • 2011-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-30
    • 2018-05-17
    • 1970-01-01
    • 2018-10-10
    • 1970-01-01
    相关资源
    最近更新 更多