#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. Вы пропустили это в своем примере.