Как включить asp:LinkButton на стороне клиента

#javascript #.net #asp.net #linkbutton

#javascript #.net #asp.net #linkbutton

Вопрос:

У меня есть asp: LinkButton, кнопка ввода, определенная как:

 <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'));"  />
  

LinkButton изначально отключен в коде как:

     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
    }
  

Но я не могу включить linkbutton.

Я что-то упускаю?

Спасибо!

__________________________________________________

Кто-нибудь заинтересован в решении вышеуказанной проблемы:
В code-behind:

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

.js:

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

ПРИМЕЧАНИЕ: При настройке lnkViewPdf.Включено = false; LinkButton отображался как

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

смотрите класс стиля aspNetDisabled, что-то добавленное ASP.Net
Однако, установив атрибуты disabled / onclick из codebehind, как показано выше, отобразите Linkbutton как:

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

HTH.

Комментарии:

1. изменил мое решение, чтобы приспособить. Поведение СЕТИ при отключении LinkButton контролирует серверную часть

Ответ №1:

Попробуйте сейчас…

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

Комментарии:

1. не работает даже после установки lnkbutton.отключено = «false»; // Обратной отправки нет

2. @iniki; ты пробовал это сейчас?

3. Проверьте это forums.asp.net/t/1148848.aspx /…

4. Спасибо 🙂 ссылка выше действительно помогла.

Ответ №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";
    }
  

Комментарии:

1. пробовал это, но установка lnkViewPdf. Атрибуты [«отключено»] = «отключено»; в коде позади фактически не отключает LinkButton … нажатие на него приводит к обратной передаче.

Ответ №3:

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

Ответ №4:

Вам нужно знать .Net сконструировал имя для того, чтобы выполнить это. Самый простой способ — установить его в заголовке страницы, если вы можете:

 <script language="javascript">

var lnkbuttonToEnableId = "<%= this.lnkViewPdf.ClientId %>";

function TestEnable() {
        alert('TestEnable() called');
        lnkbuttonToEnableId.disabled = false;
}

</script>
  

В любом случае, единственный способ заставить это работать — каким-то образом передать ClientID из lnkViewPdf в функцию.

Комментарии:

1. не работает :-(даже пробовал использовать var lnkbuttonToEnableId = «<%= this.lnkViewPdf. ClientID %>»; но выдается ошибка: LinkButton не содержит определения для ‘ClientID.

2. @iniki: Поскольку вы указали, ClientIDMode="Static" вы должны иметь возможность пропустить этот шаг и перейти сразу к $("#lnkViewPdf").removeAttr('disabled'); . Это свойство предписывает процессу рендеринга страницы присвоить элементу управления тот же идентификатор клиента, который вы указываете в ID.

Ответ №5:

попробуйте оба из них:

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

или

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

ОБНОВЛЕНИЕ: Поскольку вы отключаете LinkButton на стороне сервера, .NET удаляет href атрибут из <a> элемента html. Что вам следует сделать, чтобы предотвратить потерю этой информации, так это отключить LinkButton на клиенте, а затем включить его, когда вам нужно. Также вместо его отключения все, что вам нужно сделать, это удалить href атрибут.

Итак, сначала вам нужно сохранить href и удалить его, чтобы <a> ссылка стала отключенной:

 $(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:

Если вы отключите кнопку LinkButton с помощью:

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

Тогда атрибут href не будет отображаться в HTML. Если вы вручную добавите отключенный атрибут вместо:

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

Тогда ваш код будет работать просто отлично.

О! .. и последнее: вам нужно установить свойство PostBackUrl для LinkButton. Вы пропустили это в своем примере.