Доступ к элементу управления на странице содержимого asp.net через Javascript - PullRequest
1 голос
/ 07 июня 2010

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

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

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

Javascriptкод помещается в validation.js и доступен через главную страницу.

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

Ответы [ 4 ]

1 голос
/ 07 июня 2010

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

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

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

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

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

1 голос
/ 07 июня 2010

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

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

0 голосов
/ 07 июня 2010

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

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 голосов
/ 07 июня 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...