Asp.Net пытается получить ClientID

Я немного застрял, пытаясь понять, как передать элемент управления ClientID одному из моих методов JavaScript.

Изменить: я понимаю, что должен упомянуть, что это приложение Asp.Net, построенное на .Net 3.5. Не могу использовать приемы .Net 4.0, но приемы 4.0, которые вы, ребята, упомянули ниже в ответах, определенно следует иметь в виду, и они легко решат эту проблему.

Когда я делаю что-то вроде следующего, мой метод Javascript получает буквальный текст ‹%= gvCompanySelector.ClientID %>, отображаемый в моем аргументе.

Ниже показано, как мой элемент управления Asp.Net выглядит на странице Aspx.

<asp:HyperLink ID="aShowList" runat="server" 
onclick="javacript:showCompanySelector('divCompanySelector','<%= gvCompanySelector.ClientID %>');" 
CssClass="button">Select</asp:HyperLink>

мой метод javascript выглядит так.

function showCompanySelector(divName,gridName) {
            var elem = document.getElementById(divName);
            var gridElem = document.getElementById(gridName);
            if (elem.style.visibility === 'visible') {
                elem.style.visibility = 'hidden';
                elem.style.height = '0px';
                gridElem.style.height = '0px';
            }
            else {
                elem.style.visibility = 'visible';
                elem.style.height = '200px';
                gridElem.style.height = null;
            }
        }

Это мой аргумент gridName, которому передается значение ‹%= gvCompanySelector.ClientID %>. Когда я ожидаю, что аргумент покажет что-то вроде ct100_blahlbah_gvCompanySelector ClientID.

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

И если предлагается использовать AddHandler или создать вызов javascript в моем программном коде, я бы хотел этого избежать. Я пытаюсь иметь некоторое чувство последовательности в этом коде. знак равно

Спасибо!


person Rob K.    schedule 21.03.2014    source источник


Ответы (3)


просто используйте

 var elem = document.getElementById('the id of the required control');
            var gridElem = document.getElementById('the id of the required control');

не нужно передавать его в javascript и изменить clientIDmode элемента управления на static

Или

нет необходимости передавать его в параметрах

var gridElem = document.getElementById('<%= idofthecontrol.ClientID %>');

иногда может показывать ошибку:

Коллекция Controls не может быть изменена, так как элемент управления содержит блоки кода (т. е. ‹% ... %>).

затем используйте

 var gridElem = document.getElementById('<%# idofthecontrol.ClientID %>');
person Sajad Karuthedath    schedule 21.03.2014
comment
Я использую метод javascript в нескольких местах. Этот метод Javascript специально поддерживает ключевые функции, которые я создаю. В частности, что-то вроде раскрывающегося списка с несколькими столбцами. - person Rob K.; 21.03.2014
comment
подождите... Я только что поймал... Измените ClientIDmode на статический. Могу ли я сделать это для элемента управления element/asp.net? э... точнее, могу ли я сделать так, чтобы только мой элемент управления гиперссылкой имел статический идентификатор? И я предполагаю, что изменение режима ClientID на статический означает, что идентификатор, который я даю элементу, не искажается как какой-то глупый тип идентификатора ct100_blahblah_Im_helping_the_developer_id... - person Rob K.; 21.03.2014
comment
Дразнить. ClientIDMode — это особенность .Net 4.0. Спасибо хоть! Классный трюк обязательно возьму на заметку! - person Rob K.; 21.03.2014
comment
@RobK.: примите мой ответ и проголосуйте, если он вам помог, и добро пожаловать - person Sajad Karuthedath; 21.03.2014

Почему вам нужно передать идентификатор клиента из вашего аргумента. Вы также можете сделать это.

function showCompanySelector(divName) {
        var elem = document.getElementById(divName);
        var gridElem = document.getElementById('<%= gvCompanySelector.ClientID %>');
        if (elem.style.visibility === 'visible') {
            elem.style.visibility = 'hidden';
            elem.style.height = '0px';
            gridElem.style.height = '0px';
        }
        else {
            elem.style.visibility = 'visible';
            elem.style.height = '200px';
            gridElem.style.height = null;
        }
    }

Другой способ сделать это для режима статического идентификатора клиента asp.net 4.0. Вы можете переопределить режим cilent как статический, а затем вы можете передать «gvCompanySelector» в свой собственный контроль. aspnet-40.html" rel="nofollow">http://www.dotnetjalps.com/2009/07/client-id-of-control-in-aspnet-40.html

Если вы используете более раннюю версию .NET Framework, вы можете переопределить идентификатор клиента следующим образом: http://weblog.west-wind.com/posts/2006/Feb/24/Overriding-ClientID-and-UniqueID.-on-ASPNET-controls

Сначала создайте библиотеку классов под названием «MyControls». Добавьте Referecen в System.web, а затем переопределите представление сетки, как показано ниже.

using System.Web.UI.WebControls;
namespace MyControls{
public class MyGrid : GridView
{
    public override string ClientID
    {
        get
        {
            return ID;
        }
    }
}}

Затем на стороне aspx зарегистрируйте свой элемент управления, как показано ниже.

<%@ Register Assembly="MyControls" Namespace="MyControls" TagPrefix="myc" %>

Затем используйте управление, как показано ниже.

 <myc:Mygrid Id="myGrid" runat="server">

 </myc:Mygrid>

Если вы хотите получить дополнительную информацию о переопределении контроля, перейдите по следующей ссылке: http://www.4guysfromrolla.com/articles/012308-1.aspx

person Jalpesh Vadgama    schedule 21.03.2014
comment
потому что я использую этот метод в нескольких местах и ​​не хочу, чтобы 5 методов делали одно и то же просто потому, что я не могу правильно передать clientid. - person Rob K.; 21.03.2014
comment
Если вы используете более позднюю версию asp.net 4.0, вы можете сделать свой режим идентификатора клиента статическим и напрямую передать «gvCompanySelector» в своем аргументе. Поскольку тег сервера в определении управления сервером не будет работать. См. дополнительные сведения об идентификаторе клиента: dotnetjalps .com/2009/07/client-id-of-control-in-aspnet-40.html - person Jalpesh Vadgama; 21.03.2014
comment
слюни... хочу. Но не может. Я предполагаю... Не могу использовать .Net 4.0. Компания пока не размещает его на веб-серверах. Просто пытаюсь оставаться waaaaaaaay впереди (день назад) времени. - person Rob K.; 21.03.2014
comment
Вы также можете переопределить свой идентификатор клиента, как показано ниже: weblog.west-wind.com/posts/2006/Feb/24/, чтобы иметь статический идентификатор клиента в другом фреймворке - person Jalpesh Vadgama; 21.03.2014
comment
Я использую .Net 3.5. И вариант переопределения предполагает, что я создал это как элемент управления, а не функциональность страницы. В идеале я хотел бы построить это как полный контроль, но в реальном мире дата завершения проекта! = время выполнения этой задачи. Хотя очень полезная информация. Спасибо! - person Rob K.; 21.03.2014
comment
Его очень легко переопределить. Не займет более 5 минут - person Jalpesh Vadgama; 21.03.2014
comment
Я добавил код в свой ответ. Пожалуйста, пройдите через это. - person Jalpesh Vadgama; 21.03.2014
comment
Я бы предпочел не настраивать GridView. Я вижу, как это будет работать, просто это не совсем то, к чему я стремлюсь. - person Rob K.; 22.03.2014

Лучшим ответом, который я нашел, было создание глобальной переменной. Вероятно, это нравится меньше, чем использование кодирования типа AddHandler, но, по крайней мере, он сохраняет мой javascript С моим javascript.

<script>
var gvCompanySelectorClientID = = '<%= gvCompanySelector.ClientID %>';

function showCompanySelector(divName,gridName) {
            var elem = document.getElementById(divName);
            var gridElem = document.getElementById(gridName);
            if (elem.style.visibility === 'visible') {
                elem.style.visibility = 'hidden';
                elem.style.height = '0px';
                gridElem.style.height = '0px';
            }
            else {
                elem.style.visibility = 'visible';
                elem.style.height = '200px';
                gridElem.style.height = null;
            }
        }

</script>

<asp:HyperLink ID="aShowList" runat="server" onclick="javacript:showCompanySelector('divCompanySelector','<%= gvCompanySelectorClientID %>');" CssClass="button">Select</asp:HyperLink>

Буду рад любым другим рекомендациям.

person Rob K.    schedule 21.03.2014
comment
Обратите внимание, что это мой идеальный ответ при использовании .Net 3.5 (или меньше, чем .Net 4.0). До сих пор. - person Rob K.; 21.03.2014