Как я могу получить доступ к элементам управления сервера из моего внешнего файла JavaScript? - PullRequest
0 голосов
/ 07 декабря 2009

Когда я использую это "#<%= txtNumberOfDrugsInKit.ClientID %>", я могу получить доступ к управлению сервером из моего скрипта JQuery; но когда я помещаю это во внешний файл сценария, он не работает.

Как я могу получить доступ к asp textbox из моего внешнего файла JavaScript? Я не могу поверить, что это не работает.

Ответы [ 5 ]

3 голосов
/ 07 декабря 2009

Что я делаю, так это помещаю скрипт на мою главную страницу (не во внешний файл), который состоит исключительно из определения объекта, подобного этому:

var Controls = {
    'Name':<%="'" + txtNumberOfDrugsInKit.ClientID%>',
    'OtherName':<%="'" + otherControl.ClientID%>'
};

Хитрость в том, что вы должны поместить это в заголовок, или вы не можете использовать его из внешних файлов, и поэтому вы должны добавить runat="server" к объявлению элемента head. Это также объясняет, почему я использую объект, а не простые имена переменных; это минимизирует вероятность столкновения имен в другом месте (у меня есть только имя «Controls», о котором нужно беспокоиться).

Затем я могу использовать этот объект Controls во внешнем скрипте, например:

var OtherElement = document.getElementById(Controls.OtherName);

или

var jQueryObj = $('#' + Controls.OtherName);

Смотрите другой пример здесь:
Могу ли я рассчитывать на то, что ctl00_PagePlaceHolder_myId останется прежним?

2 голосов
/ 07 декабря 2009

Я думаю, что статья поможет вам. http://lanitdev.wordpress.com/2009/06/08/extending-jquery-to-select-asp-controls/+

Я использовал это решение, и оно очень хорошо работает для выбора серверных элементов управления без дополнительной разметки.

0 голосов
/ 07 декабря 2009

"# <% = txtNumberOfDrugsInKit.ClientID%>", скорее всего, не выполняется во внешнем файле JS, поскольку он не является частью страницы ASP.NET Вам нужно будет «жестко закодировать» идентификатор.

Но если у вас есть проблемы со "странными" идентификаторами, которые генерирует ASP.NET, вы можете поместить ClientID в скрытое поле и прочитать его оттуда во внешнем файле JS

0 голосов
/ 07 декабря 2009

Что я делал в прошлом, чтобы обойти это, так это вместо этого использовал имя CSS. В вашем элементе управления txtNumberOfDrugsInKit вы можете сделать что-то вроде следующего ...

<asp:TextBox ID="txtNumberOfDrugsInKit" CssClass="txtNumberOfDrugsInKit" ... />

И затем в вашем jQuery вместо того, чтобы ссылаться на него как $("#<%= txtNumberOfDrugsInKit.ClientID %>"), вы можете ссылаться на него по имени класса. В этом случае вы просто сделаете $(".txtNumberOfDrugsInKit"). До тех пор, пока вы сохраняете эти селекторы уникальными на своей странице - вы можете выбрать только один элемент управления с ним.

0 голосов
/ 07 декабря 2009

Я предполагаю, что #<%= txtNumberOfDrugsInKit.ClientID %> оценивается на стороне сервера , поэтому, конечно, он не работает во внешнем js, потому что они обслуживаются статически, а не обрабатываются на стороне сервера.

Я думаю, вы не в полной мере знаете, какой код работает на сервере, а какой - на клиенте. Один из способов передачи этих данных во внешний скрипт - это поместить их в скрытый ввод или скрытый div, а затем прочитать из этого элемента DOM во внешнем скрипте.

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