атрибуты id и name элементов HTML, которыми управляет ASP.NET - PullRequest
5 голосов
/ 29 января 2009

У меня проблема в приложении C # ASP.NET, где теги id и name изменяются во время выполнения с префиксом «MainView_» и «MainView $» соответственно. Итак, мой код:

<asp:Button ID="OKToContinueCheckInButton" runat="server" CausesValidation="False" Visibility="false" Style="display: none" OnClick="btnOKToContinueCheckIn" />

<script type="text/javascript">
<!--
    var answer = confirm("Some Warning");
    if (answer)
        document.getElementById('OKToContinueCheckInButton').click();
// -->
</script> 

становится:

<input type="submit" name="MainView$OKToContinueCheckInButton" value="" id="MainView_OKToContinueCheckInButton" Visibility="false" style="display: none" />

<script type="text/javascript">
<!--
    var answer = confirm("Some Warning");
    if (answer)
        document.getElementById('OKToContinueCheckInButton').click();
// -->
</script>

getElementID () возвращает значение NULL, поскольку имя изменилось. Может кто-нибудь сказать мне, почему это происходит, и если есть способ отключить его от изменения значений идентификатора и имени. Спасибо!

-Sephrial

Ответы [ 9 ]

10 голосов
/ 29 января 2009

Я думаю, это поможет вам ...

<script type="text/javascript">
<!--
    var answer = confirm("Some Warning");
    if (answer)
        document.getElementById('<%= OKToContinueCheckInButton.ClientID %>').click();
// -->
</script>

Это часть, которая делает трюк

<%= OKToContinueCheckInButton.ClientID %>
3 голосов
/ 29 января 2009

Хорошей новостью является то, что ASP.Net 4.0 решит эту проблему.

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

3 голосов
/ 29 января 2009

Это фундаментальная часть работы модели Asp .Net Forms.

Идентификаторы изменены, поэтому вам не нужно беспокоиться о сохранении уникальных идентификаторов для пользовательских элементов управления, пользовательских элементов управления, повторителей и т. Д.

Вы можете использовать метод Кирилла. Я также считаю, что JQuery очень хорошо подходит для этой модели, потому что вы можете легко ссылаться на элементы управления по их классу или положению в документе.

2 голосов
/ 29 января 2009

Я думаю, вы забыли одинарные кавычки:

document.getElementById(<%= OKToContinueCheckInButton.ClientID %>).click();

Должно быть:

document.getElementById('<%= OKToContinueCheckInButton.ClientID %>').click();
1 голос
/ 27 февраля 2009

Если вы хотите использовать jQuery, это совсем не проблема, и вам не придется беспокоиться об изменении имен. С помощью селектора $ = (заканчивается на) это будет проблемой:

if (answer)
  $("a[id$='MainView_OKToContinueCheckInButton']:first").click();

С jQuery-селекторами очень легко работать

1 голос
/ 29 января 2009

Вы должны использовать свойство ClientID следующим образом:

<asp:Button ID="OKToContinueCheckInButton" runat="server" CausesValidation="False" Visibility="false" Style="display: none" OnClick="btnOKToContinueCheckIn" />

<script type="text/javascript">
<!--
    var answer = confirm("Some Warning");
    if (answer)
        document.getElementById(<%=OKToContinueCheckInButton.ClientID%>).click();
// -->
</script>
1 голос
/ 29 января 2009

Напишите свой скрипт из кода ниже. Зарегистрируйте его в качестве сценария запуска и используйте идентификатор клиента объекта.

System.Text.StringBuilder script = new System.Text.StringBuilder();
script.Append("var answer = confirm('Some Warning');");
script.Append("if (answer)");

// The client ID will be what is put in the browser so it will find it.
script.AppendFormat("document.getElementById('{0}').click();", this.btnSomeButton.ClientID);

// Hook this up to the button
this.btnSomeButton.OnClientClick = script.ToString();
1 голос
/ 29 января 2009
<asp:Button ID="OKToContinueCheckInButton" runat="server" CausesValidation="False" Visibility="false" Style="display: none" OnClick="btnOKToContinueCheckIn" />

<script type="text/javascript">
<!--
    var answer = confirm("Some Warning");
    if (answer)
        document.getElementById(<%=OKToContinueCheckInButton.ClientID %>).click();
// -->
</script>
0 голосов
/ 29 января 2009

Спасибо за все ваши ответы, думаю, я понимаю, почему значения заменяются. Тем не менее, когда я попытался найти решение выше, он выдает ошибку, потому что он генерирует следующий HTML с '_' вместо '$'. Я использовал, document.getElementById (<% = OKToContinueCheckInButton.ClientID%>). Click ();

<input type="submit" name="MainView$OKToContinueCheckInButton" value="" id="MainView_OKToContinueCheckInButton" Visibility="false" style="display: none" />

<script type="text/javascript">
<!--
    var answer = confirm("Some Warning");
    if (answer)
        document.getElementById(MainView_OKToContinueCheckInButton).click();
// -->
</script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...