Доступ к управлению сервером с помощью javascript в веб-форме с главной страницей? - PullRequest
0 голосов
/ 28 ноября 2010

У меня есть веб-форма, которая использует мастер-страницу, которая, в свою очередь, наследует другую мастер-страницу.

У меня есть раскрывающийся список drpCursos

В своем коде JavaScript я пытался получить доступ к элементу управления, ноне повезло:

var combo = document.forms[0]['drpCursos'];

combo это null

После проверки исходного кода я изменил его на:

var combo = document.forms[0]['ctl00_ContentPlaceHolder1_drpCursos'];

Теперь работает, ноЯ не думаю, что это хорошее решение ...

Как бы я сделал это правильно?

РЕДАКТИРОВАТЬ : мой код javascript находится во внешнемфайл.

Я попробовал решение Дарина, но оно не сработало, затем я вставил свой код прямо в страницу aspx, и теперь оно работает.

Кроме того, оно работает только тогда, когда код внутрифункция, в противном случае я получаю undefined

Почему это происходит?

Ответы [ 3 ]

2 голосов
/ 28 ноября 2010
var combo = document.forms[0]['<%= drpCursos.ClientID %>'];
1 голос
/ 28 ноября 2010

Решение Дарина будет работать, но если вы используете .net 4.0, возможно, есть лучшие решения сейчас. Используя свойство ClientIDMode элемента управления, вы можете контролировать, какие имена присваиваются элементу управления во время выполнения (то есть, ctl00_ContentPlaceHolder1_drpCursos).

т.е. <asp:Label ID="Label1" runat="server" ClientIDMode="[Mode Type]"/>

http://weblogs.asp.net/asptest/archive/2009/01/06/asp-net-4-0-clientid-overview.aspx

Ниже приведено:

Типы мод

  • Legacy: значение по умолчанию, если ClientIDMode не задан где-либо в иерархии элементов управления. Это приводит к тому, что идентификаторы на стороне клиента ведут себя так же, как в версии 2.0 (3.0 и 3.5 не изменили этот путь кода) платформы. В этом режиме будет сгенерирован идентификатор, аналогичный «ctl00_MasterPageBody_ctl01_Textbox1».

  • Наследовать: это поведение по умолчанию для каждого элемента управления. Это смотрит на родительский элемент управления, чтобы получить его значение для ClientIDMode. Вам не нужно устанавливать это на каждом элементе управления, так как он используется по умолчанию, он используется только тогда, когда ClientIDMode был изменен, и новое желаемое поведение должно наследоваться от родительского элемента управления.

  • Статический: этот режим делает именно то, что вы думаете, он делает идентификатор на стороне клиента статическим. Это означает, что то, что вы указали для идентификатора, будет использоваться для идентификатора на стороне клиента. Предупреждение: это означает, что если в повторяющемся элементе управления используется статический ClientIDMode, разработчик несет ответственность за обеспечение уникальности идентификатора на стороне клиента.

  • Предсказуемый: этот режим используется, когда инфраструктура должна гарантировать уникальность, но это должно быть сделано предсказуемым образом. Чаще всего этот режим используется на элементах управления с привязкой к данным. Инфраструктура будет пересекать иерархию элементов управления с префиксом переданного идентификатора вместе с идентификатором родительского элемента управления, пока не достигнет элемента управления в иерархии, для которого ClientIDMode определен как статический. В случае, если элемент управления помещен в элемент управления, привязанный к базе данных, к предоставленному идентификатору будет добавлен суффикс со значением, которое идентифицирует этот экземпляр. Свойство ClientIDRowSuffix используется для управления значением, которое будет использоваться в качестве суффикса (см. Примеры). В этом режиме будет сгенерирован идентификатор, похожий на «Gridview1_Label1_0»

Если у вас есть только некоторые элементы управления, где вам нужен идентификатор для использования с javascript, я бы лично использовал «статический» метод, назначил нужные мне идентификаторы и позволил бы .net назначить остальные по умолчанию.

0 голосов
/ 06 ноября 2015

Попробуйте это:

//default ID form asp.net is aspnetForm
// id$ = id ending with ...
var combo = $("form#aspnetForm").find("[id$='drpCursos']");

Или

var combo = $("form#aspnetForm").find("select[id$='drpCursos']");

С уважением

...