Как назначить переменную C # для элемента asp с помощью JavaScript - PullRequest
0 голосов
/ 01 декабря 2010

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

Вот оно:

document.getElementById('lbAccessories').innerHTML = '<%#SelectLabel%>';

В моем коде asp я использую:

<asp:LinkButton ID="lbAccessories" runat="server" />'

Я не могу присвоить значение непосредственно кнопке ссылки, используя Text='<%#SelectLabel%>', потому что я хочу сделать его более интеллектуальным.

Кто-нибудь знает, как это сделать?

Спасибо

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

Вот мой код, я пытался использовать <%=lbAccessories.clientId%>, но он выдает ошибку: lbAccessories не существует в контексте.

<script type="text/javascript">
    function function(Ref) {
        if ('<%=TextBoxClientID%>' == 'txtLink') 
        {
            document.getElementById('lbAccessories').innerHTML = '<%#SelectLabel%>';
        }
        else if ('<%=TextBoxClientID%>' == 'btnSearch') {
            document.getElementById('lbAccessories').innerHTML = '<%#ViewDetail%>';
        }
    }

</script>

Edit:

<asp:GridView ID="gv1" AutoGenerateColumns="false" runat="server" 
    AllowPaging="true" OnPageIndexChanging="pic">
    <Columns>
        <asp:TemplateField HeaderText="">
            <ItemTemplate>
                <asp:LinkButton ID="lbAccessories" runat="server" OnClientClick='<%#string.Format("passAccessory(\"{0}\");", Eval("Ref"))%>'></asp:LinkButton>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

Edit:

Большое спасибо всем, кто разместил предложения.

Я изменил код JavaScript на следующий:

<script type="text/javascript">
    function passAccessory(accessoryRef) {

        if ('<%=TextBoxClientID%>' == 'txtLink') {
            document.getElementById('<%= gvAccessories.FindControl("lbAccessories").ClientID %>').innerHTML = '<%#SelectLabel%>';
        }
        else if ('<%=TextBoxClientID%>' == 'btnSearch') {
            document.getElementById('<%= gvAccessories.FindControl("lbAccessories").ClientID %>').innerHTML = '<%#ViewDetail%>';
        }
    }
</script>

в *.aspx.cs файле, я добавил: protected LinkButton lbAccessories { get; set; }

Выдает исключение:

Ссылка на объект не установлена ​​для экземпляра объекта

У кого-нибудь есть идеи? Большое спасибо

Edit:

Наконец, мы сделали это с помощью кода csharp. Это более гибкий и управляемый. Мой коллега помог мне. Спасибо всем за помощь !!!

Ответы [ 4 ]

2 голосов
/ 01 декабря 2010

Проверьте выходной HTML, является ли идентификатор привязки тем, что вы ищете.В любом случае вам лучше использовать <%= lbAccessories.ClientID %>, чем ссылаться на идентификатор сервера из клиентского скрипта.

Если вы по какой-то причине не хотите (или не можете) использовать <%= lbAccessories.ClientID %>, тогда просмотрите следующую статью о плагине jQueryкоторый позволяет получить элемент DOM по идентификатору сервера:

http://radek -stromsky.blogspot.com / 2010/11 / aspnet-how-to-get-client-id-with-jquery.html

РЕДАКТИРОВАТЬ:

Я внес несколько изменений в ваш код:

<script type="text/javascript">
    function passAccessory(Ref) {
        if ('<%= TextBoxClientID %>' == 'txtLink') 
        {
            document.getElementById('<%= GridView1.FindControl("lbAccessories").ClientID %>').innerHTML = '<%# SelectLabel %>';
        }
        else if ('<%= TextBoxClientID %>' == 'btnSearch') {
            document.getElementById('<%= GridView1.FindControl("lbAccessories").ClientID %>').innerHTML = '<%#ViewDetail%>';
        }
    }
</script>

 <asp:LinkButton ID="lbAccessories" runat="server" OnClientClick='<%#string.Format("passAccessory(\"{0}\");", Eval("Ref"))%>'></asp:LinkButton>

РЕДАКТИРОВАТЬ: РЕДАКТИРОВАТЬ:

Я исправил код выше.Сейчас есть GridView1.FindControl("lbAccessories")

2 голосов
/ 01 декабря 2010

Предполагая, что SelectLabel является открытым или защищенным строковым элементом или свойством вашей страницы ASP.NET, вы должны быть в состоянии отобразить строку, используя:

document.getElementById('<%= lbAccessories.ClientID %>').innerHTML = '<%= SelectLabel%>';

Есть ли причина, по которой "интеллект"«Вы требуете, не может быть на стороне сервера?Если вы устанавливаете SelectLabel с помощью C #, вы также сможете динамически устанавливать lbAccessories.Text = SelectLabel;.

1 голос
/ 01 декабря 2010

lbAccessories - элемент управления на стороне сервера.Когда сервер испускает для него HTML, он назначает уникальный ClientId для элемента управления.В JavaScript вы должны получить к нему доступ через его ClientId, например:

document.getElementById('<%=lbAccessories.ClientId%>').innerHTML = '<%#SelectLabel%>';

Надеюсь, это поможет.

1 голос
/ 01 декабря 2010

добавить скрытое поле с id = "hid1" и установить его значение в значение selectlabel, затем:

document.getElementById('lbAccessories').innerHTML

= document.getElementById ('hid1'). InnerHTML;

JQuery:

$('#lbAccessories).html($('#hid1').html());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...