【问题标题】:How to enable asp:LinkButton on client side如何在客户端启用 asp:LinkBut​​ton
【发布时间】:2011-05-26 15:22:54
【问题描述】:

我有asp:LinkBut​​ton,输入Button定义为:

<asp:LinkButton ID="lnkViewPdf" runat="server" CssClass="icoMiniTest" ClientIDMode="Static" >View Office Pdf</asp:LinkButton>   
<input id="Button2" type="button" value="TestEnable" onclick="TestEnable(document.getElementById('lnkViewPdf'));"  />

LinkBut​​ton 最初在代码隐藏中被禁用:

    if (!IsPostBack)
    {
        this.lnkViewPdf.Enabled = false;
    }

并且需要在点击Button2时启用,所以我调用javascript函数来启用链接:

function TestEnable(lnkbutton) {
        alert('TestEnable() called');
        alert(lnkbutton.id);
        lnkbutton.disabled = "";
        //$("#lnkbutton").removeAttr('disabled');  //even this doesn't work
    }

但我无法启用链接按钮。

我错过了什么吗?

谢谢!

____________ __________________ _________________ ___

任何有兴趣解决上述问题的人:
在代码隐藏中:

this.lnkViewPdf.Attributes["disabled"] = "disabled";
this.lnkViewPdf.Attributes["onclick "] = "return false";

.js:

function TestEnable(lnkbutton) {
         $(lnkbutton).removeAttr('disabled');
        lnkbutton.onclick = "";    
}

注意:当设置 lnkViewPdf.Enabled = false; LinkBut​​ton 被渲染为

<a id="lnkViewPdf" class="aspNetDisabled icoMiniTest">View Office Pdf</a>

查看样式类 aspNetDisabled,由 ASP.Net 添加的东西
但是,如上所示从代码隐藏中设置 disabled/onclick 属性,将 Linkbutton 呈现为:

<a id="lnkViewPdf" class="icoMiniTest" disabled="disabled" onclick ="return false" href="javascript:__doPostBack(&#39;lnkViewPdf&#39;,&#39;&#39;)">View Office Pdf</a> 

HTH。

【问题讨论】:

  • 更改了我的解决方案以在禁用 LinkBut​​ton 控件服务器端时适应 .NET 行为

标签: javascript .net asp.net linkbutton


【解决方案1】:

立即尝试...

function TestEnable(lnkbutton) {
    lnkbutton.disabled = "";
    lnkbutton.onclick = "";
}

【讨论】:

  • 即使在设置 lnkbutton.disabled = "false" 后也不起作用; //没有回发
  • @iniki;你现在试过了吗?
  • 谢谢 :) 上面的链接确实有帮助。
【解决方案2】:

在后面的代码中,而不是通过设置 Enabled = false 来禁用,设置:

    lnkViewPdf.Attributes["disabled"] = "disabled"

所以你的javascript函数:

    function TestEnable(lnkbutton) {
    alert('TestEnable() called');
    alert(lnkbutton.id);
    lnkbutton.disabled = "";
}

您的标记:

    <asp:LinkButton ID="lnkViewPdf" runat="server" CssClass="icoMiniTest" ClientIDMode="Static" >View Office Pdf</asp:LinkButton>   
    <input id="Button2" type="button" value="TestEnable" onclick="TestEnable(document.getElementById('<%= lnkViewPdf.ClientID %>')); return false;"  />

还有你的代码隐藏:

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
            lnkViewPdf.Attributes["disabled"] = "disabled";
    }

【讨论】:

  • 试过了,但是设置 lnkViewPdf.Attributes["disabled"] = "disabled";在后面的代码中实际上并没有禁用 LinkBut​​ton...单击它会导致回发。
【解决方案3】:
$("#<%=lnkViewPdf.ClientID %>").removeAttr("disabled");

【讨论】:

    【解决方案4】:

    您需要知道 .Net 构造的名称才能完成它。如果可以的话,最简单的方法是将其设置在页面的头部:

    <script language="javascript">
    
    var lnkbuttonToEnableId = "<%= this.lnkViewPdf.ClientId %>";
    
    function TestEnable() {
            alert('TestEnable() called');
            lnkbuttonToEnableId.disabled = false;
    }
    
    </script>
    

    无论如何,让它工作的唯一方法是以某种方式将 lnkViewPdf 的 ClientId 传递给函数。

    【讨论】:

    • 不工作 :-( 甚至尝试使用 var lnkbuttonToEnableId = ""; 但出现错误:LinkBut​​ton 不包含 'ClientId 的定义。
    • @iniki:既然你指定了ClientIDMode="Static",你应该可以跳过这一步直接去$("#lnkViewPdf").removeAttr('disabled');。该属性指示页面呈现过程为控件提供与您在 ID 中指定的相同的 ClientID。
    【解决方案5】:

    尝试这两种方法:

    <input id="Button2" type="button" value="TestEnable"
        onclick="TestEnable(document.getElementById('<%= lnkViewPdf.ClientID %>'));"  />
    

    或

    $("#<%= lnkViewPdf.ClientID %>").removeAttr('disabled'); 
    

    更新:由于您在服务器端禁用 LinkButton,因此 .NET 会从 &lt;a&gt; html 元素中删除 href 属性。为了防止丢失该信息,您应该做的是禁用客户端上的LinkButton,然后在需要时启用它。此外,您只需删除 href 属性,而不是禁用它。

    因此,首先您需要保留 href 并将其删除,以便禁用 &lt;a&gt; 链接:

    $(document).ready(function () {
        var $lnkViewPdf = $("#lnkViewPdf");
    
        $lnkViewPdf.data("href", $lnkViewPdf.attr("href"));
        $lnkViewPdf.removeAttr("href");
    });
    

    以及启用它的功能:

    function TestEnable(lnkViewPdfId) {
        var $lnkViewPdf = $("#" + lnkViewPdfId);
    
        $lnkViewPdf.attr("href", $lnkViewPdf.data("href"));
    }
    

    【讨论】:

      【解决方案6】:

      如果您使用以下方法禁用 LinkBut​​ton:

      if (!IsPostBack)
      {
          this.lnkViewPdf.Enabled = false;
      }
      

      那么href属性不会显示在HTML中。如果您手动添加 disabled 属性:

      if (!IsPostBack)
      {
          lnkViewPdf.Attributes.Add("disabled", "disabled");
      }
      

      那么你的代码就可以正常工作了。

      哦!.. 最后一件事:您需要为 LinkBut​​ton 设置 PostBackUrl 属性。您在示例中错过了它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-15
        • 2019-09-24
        • 1970-01-01
        • 2018-12-24
        • 1970-01-01
        相关资源
        最近更新 更多