2013-02-21 5 views
3

Я пытаюсь работать с следующим кодом.Тег сервера не очень хорошо сформирован. (Databinder.eval)

<asp:DataGrid ID="Grid" runat="server" DataKeyField="KeyID" CssClass="grid" 
... 
<asp:CheckBox runat="server" ID="checkBox-<%#DataBinder.Eval(Container.DataItem,"KeyID")%>" AutoPostBack="false"></asp:CheckBox> 

Когда я запускаю код, я получил ошибку ниже:

Error 25 The server tag is not well formed. 

Примечание: Это работает без RUNAT = "сервер". Какое средство защиты от этой проблемы?

+0

попробуйте одинарные кавычки вместо двойной за пределами блока данных.Eval .. например. ID = 'checkBox - <% # DataBinder.Eval (Container.DataItem, "KeyID")%>' – lahsrah

+0

Возможный дубликат [Использование DataBinder.Eval() в атрибуте style для элемента управления asp.net] (http: // stackoverflow .com/questions/3434744/using-databinder-eval-in-style-attribute-of-an-asp-net-control) (ключевой момент: вы не можете использовать 'DataBinder.Eval' только для части значения атрибута .) –

+0

@sylon это не работает для одиночных Qoutes тоже. ID = 'checkBox - <% # DataBinder.Eval (Container.DataItem, "ID")%>' Ошибка 'checkBox - <% # DataBinder.Eval (Container.DataItem, "ID")%>' is not действительный идентификатор. – RockOnGom

ответ

4

Вам не нужно устанавливать идентификатор CheckBox для выполнения того, что вы хотите сделать (изменить цвет фона). Ваш CheckBox должен выглядеть следующим образом (я добавил KeyID как текстовое значение, если вы хотите, чтобы отобразить его ... или вы можете просто удалить, что если вы хотите только флажок):

<asp:CheckBox runat="server" ID="checkbox" Text='<%# Eval("KeyID") %>' AutoPostBack="false"></asp:CheckBox> 

Теперь ваш флажок будет оказывать что-то вроде этого:

<input id="MainContent_Grid_checkbox_0" type="checkbox" name="ctl00$MainContent$Grid$ctl02$checkbox" /><label for="MainContent_Grid_checkbox_0">Value of KeyID</label> 

Поскольку все имена заканчиваются «флажок», вы можете применить функцию на событие изменения для тех элементов, чье имя оканчивается на «флажок». Вы не указали, что это был вопрос JavaScript, или если вы используете JQuery ... этот ответ использует jQuery:

<script> 
    $('input[name$="checkbox"]').change(function() { 
     if ($(this).is(':checked')) { 
      $(this).parent().css('background-color', 'yellow'); 
     } 
     else { 
      $(this).parent().css('background-color', 'white'); 
     } 
    }); 
</script> 

Это будет определять, если флажок установлен, и если так будет установить background- цвет его родителя (<td>, который находится внутри, в обработанном DataGrid HTML), в зависимости от значения.

Аналогичным образом, вы можете перейти к следующему parent() и выделить всю строку.

Ресурсы: jQuery Selectors

OnCheckedChanged - это событие, которое вы бы обработать в коде позади, а не в JavaScript.

+0

что такое код для бирка? Спасибо. – RockOnGom

+0

Вы используете jQuery? Вы можете просто изменить его на: '$ (this) .parent(). Parent(). Css ('background-color', 'yellow');' (extra parent() получит родительский элемент '', который будет ''). Я могу добавить только javascript, если вы не используете jQuery. – MikeSmithDev

Смежные вопросы