Как получить доступ к ClientID из ServerControl во внешнем JavaScript - PullRequest
1 голос
/ 24 октября 2011

В настоящее время, если я использую JavaScript в своих проектах SharePoint, я добавляю код в файл * .ascx, в блок <script type="text/javascript"></script> и создаю для каждого элемента переменную для ClientID.

.

Например:

var test = '<%= TextBox1.ClientID %>';

Теперь я хотел бы добавить внешний JavaScript в мои проекты и вставить туда код. Но как я могу получить доступ к ClientID? Во внешнем JavaScript я не могу использовать <%= TextBox1.ClientID %>. Я нашел это: ссылка на серверные элементы управления во внешнем файле , но я не понимаю, как это должно работать. Было бы замечательно, если бы кто-то мог объяснить мне, как получить доступ к идентификаторам.

Кстати, а почему это:

<script type="text/javascript">
    var ClientIDs = {
        test1   : '<%= TextBox1.ClientID %>',
        test2   : '<%= TextBox2.ClientID %>'
        }

    function SetButtonStatus() {    
            alert($(ClientIDs.test1).value);
        }
</script>

не работает, сообщение не будет отображаться?

Greetz

Редактировать 1:

Хорошо, я мог бы просто использовать textBox1 в моем внешнем скрипте? Я сделал это так, это в моем * .ascx файле:

<script type="text/javascript">
    var ClientIDs = {
        textBox1:    '<%= textBox1.ClientID %>',
        textBox2:    '<%= textBox2.ClientID %>'
    }
</script>

В моем внешнем скрипте есть только функция для его проверки:

function test () {
alert($(ClientIDs.textBox1).val();
}

Я также проверил это с "#" +. Каждый раз, когда выполняется test (), я получаю следующую ошибку:

"document.getElementById(...)" is null or not an object

Редактировать 2: Я пропустил ) в предупреждении. Но теперь я получаю сообщение, что переменная не определена. Если я использую: $('#' + ClientIDs.SumbitSearch).val(), я просто получаю текст, а не идентификатор моего элемента управления.

Редактировать 3: На данный момент я использую:

<script type="text/javascript">
    var ClientIDs = {
        test1 :    '<%= TextBox1.ClientID %>',
        test2 :    '<%= TextBox2.ClientID %>'
    }

    function test() {
       alert($('#' + ClientIDs.test1).attr("id")));
    }
</script>

В моем * .ascx файле это работает. Мне не нравится этот способ ... Он не работает во внешнем JS, ссылки не работают. Если у кого-то есть другие идеи, которые будут работать с .net 3.5, было бы неплохо, если бы он дал мне знать.

Ответы [ 4 ]

2 голосов
/ 24 октября 2011

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

Например, ваш * .ascx файл будет содержать этот JavaScript:

var textBox1 = '<%= TextBox1.ClientID %>';

Тогда ваш внешний файл JavaScript может просто ссылаться на переменную textBox1.

Теперь есть другие способы сделать это. Если вы используете ASP.NET 4, вы можете использовать новое свойство ClientIDMode , чтобы запретить ASP.NET изменять ваши идентификаторы. Если вы не используете ASP.NET 4, можете также просто добавить класс CSS к элементам, которые вы хотите выбрать, и просто изменить селектор jQuery на использование класса (хотя и немного медленнее, чем при использовании идентификатора).

Наконец, вам нужно будет использовать # при оценке селектора jQuery для идентификатора элемента, так что это будет работать:

alert($('#' + ClientIDs.test1).val());
1 голос
/ 27 августа 2012

На странице ASP:

<script>
    var test2 = '<%= TextBox2.ClientID %>'
</script> 

И во внешнем доступе JavaScript TextBox2 таким образом:

documnet.getelementByid(test2);
0 голосов
/ 25 октября 2011

Используйте глобальный параметр explicity.

window.clientId = '<% = TextBox1.ClientID%>';

это означает, что у вас есть глобальная переменная "cilentId".И тогда вы можете использовать его везде.

0 голосов
/ 24 октября 2011

Я никогда не находил решения, которое мне нравится, но я реализовал пару обходных путей, которые не полностью ужасны:

  • ДляКод JS, который должен ссылаться на определенные элементы страницы, определите его в файле .aspx, чтобы у вас был доступ к <% = btnFoo.ClientID%>.Эти функции могут вызывать общие тяжелые функции в вашем файле .js.
  • Определите переменные javascript в вашем файле .aspx для хранения значений ClientID.Функции в вашем файле .js могут ссылаться на эти переменные, чтобы получить идентификаторы клиента.Конечно, эти функции будут корректно работать только на страницах, которые определяют ожидаемые переменные.

Возможно, у других SO есть более элегантные решения этой проблемы - я с нетерпением жду других ответов.

...