Доступ к управлению в содержании asp.net пролистывает JavaScript

У меня есть форма на моей странице содержания, для которой я делаю некоторые клиентские проверки с помощью JavaScript. JavaScript ведет себя как ожидалось, если я помещаю код JS непосредственно в страницу содержания. Но если я помещаю код JS в свой собственный файл и пытаюсь получить доступ к этому от страницы содержания/ведущего устройства (через атрибут src тега script), я получаю ошибку периода выполнения, когда проверка функционирует в JS том, чтобы быть названным.

Чтобы быть конкретным, я добираюсь ниже ошибки. Ошибка периода выполнения Microsoft JScript: Возраженный ожидал/требовал в этой строке - document.getElementById (' <% =txtemailId. % ClientID>') .value

txtemailId находится на странице содержания.

Код JavaScript помещен в validation.js и получен доступ через основную страницу.

Причина, которую я предполагаю, состоит в том, что, когда .NET анализирует файлы, это не может заменить txtemailId. ClientID с клиентским значением, которое было бы сгенерировано позже. Так, как нужно пойти об этом?Спасибо!

1
задан user355562 7 June 2010 в 13:34
поделиться

4 ответа

Ответ на этот вопрос довольно прост.

На странице содержимого объявите встроенную переменную JScript, убедитесь, что она находится над тегом.

<script>
  var emailClientId = &lt;%=txtemailId.ClientID%&gt;;
</script>

В вашем файле include.js используйте глобальную переменную emailClientId.

Очевидно, что это немного неуклюже, поскольку не весь код JScript содержится в файле include.js, что затрудняет отладку / диагностику, поскольку неясно, откуда именно берется значение. Вы должны четко прокомментировать / задокументировать это в вашем коде, чтобы облегчить обслуживание его кодовой базы в будущем.

1
ответ дан 3 September 2019 в 00:00
поделиться

Автономные файлы .js не проходят через синтаксический анализатор ASPX, поэтому ваше выражение не оценивается.

Чтобы решить эту проблему, вы можете установить глобальные переменные (или параметры функций, или что-то еще) в файлах ASPX с идентификаторами элементов управления, а затем использовать их в автономном файле .js.

В качестве альтернативы вы можете использовать имена классов (которые не искажаются) вместо идентификаторов. (Это очень просто с использованием jQuery)

0
ответ дан 3 September 2019 в 00:00
поделиться

Такой подход лучше всего подходит для того, чего вы хотите достичь:

validation.js

var Validation = {
     EmailId: null,

     Validate: function() {
          var email = document.getElementById(EmailId).value;
     }
}

page.aspx

Validation.EmailId = '<%=txtemailId.ClientID %>'; //initialize
Validation.Validate(); //whenever you want to validate
0
ответ дан 3 September 2019 в 00:00
поделиться

Вы правы, код <% = txtemailId.ClientID%> будет заменен ASP.Net на реальный идентификатор клиента, только если этот код находится в файле ASP.Net . Поэтому, если вы поместите этот javascript в отдельный файл .js, ASP.Net ничего об этом не узнает, и код не будет проанализирован.

Самый простой способ добиться этого - сделать идентификаторы элементов управления параметрами ваших функций. Таким образом, вы можете иметь вызывающий код javascript в вашем файле .aspx (или .ascx) вместе с кодом <% = txtemailId.ClientID%> .

1
ответ дан 3 September 2019 в 00:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: