Как использовать строки JavaScript для динамического создания «<% = ... ClientID%>»? - PullRequest
3 голосов
/ 11 марта 2011

Привет я пытаюсь написать JavaScript генерировать <%= element.ClientID% >, где элемент является одним из входных параметров функции. Я пытаюсь написать переменную

var elementName = "<%=" + element + ".clientID%>" 

который выдает ошибку

CS0117: «строка» не содержит определение для 'clientID'

Ответы [ 2 ]

8 голосов
/ 11 марта 2011

Это приводит к ошибке, потому что сначала выполняется обработка тегов <%%> на стороне сервера.Затем результат выводится как текст, в данном случае это JavaScript.Итак, сервер видит это <%=" + element + ".clientID%> и выдает ошибку, потому что не может этого понять.Предполагается, что строка " + element + " является значением, для которого вызывается .clientID.

Есть два способа обойти это.

Опция 1: ВыводВсе идентификаторы

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

var elements = [
    coolbutton: '<%= coolbutton.ClientId %>',
    simplebutton: '<%= simplebutton.ClientId %>',
    otherbutton: '<%= otherbutton.ClientId %>'
];

Тогда вы можете получить идентификатор, выполнив следующее:

var elementId = elements[element];

Опция2. Используйте Ends-with

Если вы можете использовать jQuery, то есть удобный способ ссылаться на элементы управления ASP.Net по ID.По сути, все идентификаторы ASP.Net оканчиваются фактическим именем переменной, которое вы используете в коде.Итак, если у вас есть элемент с именем CoolButton, вы можете найти его в javascript, используя jQuery, например так:

var element = $('[id$=CoolButton]');

Оператор $ = означает конец-с.Таким образом, он находит все элементы на странице с идентификатором, который заканчивается CoolButton.Фактический идентификатор элемента управления ASP.Net на странице будет длинным, но он всегда будет заканчиваться чем-то вроде NamingContainer$CoolButton.

Если вы не можете использовать jQuery, вы можете написать эту логику самостоятельно.

function findByIdEndsWith(endId) {
    //loop through all elements on the page
        //if the current element's id ends with endId, return it

    //return null;
}

Этот тип функции обсуждается подробнее здесь .

0 голосов
/ 11 марта 2011

Как указывает EndangeredMassa, ваша обработка на стороне сервера оценивает <%%> (возможно, ERB?).

Попробуйте выбрать <% = с помощью & lt;% = </p>

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