включить кнопку asp.net с помощью javascript

У меня есть это приложение, в котором я хочу включить кнопку asp.net с помощью javascript. Код JavaScript:

function Enable() {
  document.getElementById('<%= Begin.ClientID %>').disabled = false;
}

Кнопка Asp:

<asp:Button ID="Begin" runat="server" Text="Submit" OnClick="Button1_Click"/>

Я использую ClientScriptBlock для вызова функции Enable:

protected void Page_Load(object sender, EventArgs e)
{
  Begin.Enabled = false;
  ClientScript.RegisterClientScriptBlock(GetType(), "EnableButton", "Enable();", true);
}

Однако когда я запускаю приложение, я получаю сообщение об ошибке:

0x800a138f - ошибка времени выполнения Microsoft JScript: 'document.getElementById (...)' имеет значение null или не является объектом

Кто-нибудь может мне с этим помочь?

Я хочу это проверить, активировал ли пользователь JavaScript в браузере. Если JavaScript не включен, кнопка остается неактивной.


person Eimantas Baigys    schedule 09.02.2014    source источник
comment
Что, если вместо RegisterClientScriptBlock вы попробуете RegisterStartupScript?   -  person Yuriy Galanter    schedule 09.02.2014
comment
Можете ли вы увидеть на обработанной странице ASPX, как выглядит разметка HTML для кнопки? Кроме того, встроена ли функция JavaScript в файл ASPX или в отдельный файл JS?   -  person Yuriy Galanter    schedule 09.02.2014
comment
Ваш код javascript находится в отдельном .js файле?   -  person Darin Dimitrov    schedule 09.02.2014
comment
@ Юрий Галантер, ты имеешь ввиду: <input type="submit" name="Submit" id="Begin" />?   -  person Eimantas Baigys    schedule 09.02.2014
comment
@Darin Dimitrov спасибо за идею, я поместил код js в заголовок, и он работает   -  person Eimantas Baigys    schedule 09.02.2014


Ответы (1)


Похоже, что код javascript помещен в отдельный файл javascript. Но, похоже, вы использовали в нем какие-то <% %> теги на стороне сервера, которые, очевидно, не будут обрабатываться. Эти теги работают только на ваших страницах ASPX. Итак, я предполагаю, что внутри вашей страницы ASPX вам нужно объявить переменную:

<script type="text/javascript">
    var beginClientId = '<%= Begin.ClientID %>';
</script>

а затем внутри вашего отдельного файла .js вы можете использовать его:

function Enable() {
  document.getElementById(beginClientId).disabled = false;
}

Или, если вы используете ASP.NET 4.0, просто поверните _ 4_:

<system.web>
    <pages clientIDMode="Static"></pages>
    <compilation debug="true" targetFramework="4.0" />
</system.web>
person Darin Dimitrov    schedule 09.02.2014
comment
Если я использую это, я получаю 0x800a1391 - Microsoft JScript runtime error: 'beginClientId' is undefined ошибку - person Eimantas Baigys; 09.02.2014
comment
Это потому, что вам нужно включить свой скрипт ПОСЛЕ той части, которая объявляет глобальную переменную. Но еще лучше использовать статические ClientIds. - person Darin Dimitrov; 09.02.2014