ASP.Net: неверный идентификатор клиента в коде позади пользовательского элемента управления - PullRequest
6 голосов
/ 25 августа 2010

Следующий код не работает.Разметка находится в пользовательском элементе управления, и я полагаю, что именно поэтому ClientID возвращает неправильный префикс для идентификатора TextBox.

Разметка:

<INPUT id="txtName" runat="server" maxlength="50" style="WIDTH:100px">
<INPUT type="button" value="Find Your Doctor" id="btnFind" runat="server"
      style="MARGIN-LEFT:10px;WIDTH:130px">

Code-Behind:

btnFind.Attributes.Add("onClick",string.Format("DoctorLink
        ('{0}',document.getElementById('{1}').value,{2});",
        row["ZipCode"],
        txtName.ClientID));

Результаты в браузере:

<input name="DoctorsMainArea1$ctl01$txtName" type="text"
   id="DoctorsMainArea1_ctl01_txtName" maxlength="50" style="WIDTH:100px" />

<input name="DoctorsMainArea1$ctl01$btnFind" type="button" 
   id="DoctorsMainArea1_ctl01_btnFind" value="Find Your Doctor" style="MARGIN-
   LEFT:10px;WIDTH:130px" onClick="PrepareDoctorLink('90210',
   document.getElementById('DoctorsMainArea1_ctl00_txtName').value);" />

Как видите, параметр для вызова JavaScript равен DoctorsMainArea1_ctl00_txtName, но фактический идентификатор элемента ввода равен DoctorsMainArea1_ctl01_txtName.

Есть идеи как это исправить?JQuery?Меня не очень интересует объяснение происходящего (возможно, на этой странице есть другой элемент управления, который мешает), но более надежный способ решения проблемы.

Ответы [ 4 ]

5 голосов
/ 25 августа 2010

Я не знаю, какую версию asp.net вы используете, но в 4.0 вы можете объявить внутри любого серверного элемента управления ClientIDMode = "static", и он даст вам точный идентификатор в браузере.

Пример:

<asp:Textbox id="txtName" runat="server" ClientIdMode="static"/>

Другие являются предсказуемыми, наследуемыми и могут использоваться с ClientIdRowsuffix. Может использоваться на уровне страниц и даже на главных страницах и даже в файле web.config.

Пример файла web.config:

<system.web>
<Pages clientIDMode="predictable"/>
other system web properties
</system.web>

Посмотрев видео сапожника Крэйга на tekpub, вы также можете прочитать о нем в блоге Рика текст ссылки . Это довольно круто.

4 голосов
/ 25 августа 2010

Вы должны попытаться переместить код, который добавляет атрибут onclick к кнопке в событии PreRender (или переопределении OnPreRender) на вашей странице или в пользовательском элементе управления. Это, вероятно, должно получить правильный ClientID.

0 голосов
/ 25 августа 2010

другое решение: HTML-тег:

<input type="text" name="txtName" id="txtName" />

код-обязывать:

string txtName_value = Request.Forms["txtName"];

и вы можете получить значение

просто используйте элемент управления html.

0 голосов
/ 25 августа 2010

Быстрое решение:

btnFind.Attributes.Add("onClick",string.Format("DoctorLink
        ('{0}',document.getElementById('{1}').value,{2});",
        row["ZipCode"],
        "DoctorsMainArea1_ctl01_" + txtName.ClientID));

Это происходит из-за того, что на вашей странице есть заполнитель содержимого.

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