服务器标签格式不正确。(databinder.eval)

Roc*_*Gom 3 c# asp.net

我正在尝试使用以下代码。

 <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>
Run Code Online (Sandbox Code Playgroud)

当我运行代码时,出现以下错误:

Error   25  The server tag is not well formed.
Run Code Online (Sandbox Code Playgroud)

注意:这是在没有 runat="server" 的情况下工作的。这个问题的补救措施是什么?

Mik*_*Dev 5

你不需要设置 CheckBox 的 ID 来做你想做的事情(改变背景颜色)。你的复选框应该是这样的(KeyID如果你想显示它,我添加了作为文本值......或者如果你只想要复选框,你可以删除它):

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

现在您的复选框将呈现如下内容:

<input id="MainContent_Grid_checkbox_0" type="checkbox" name="ctl00$MainContent$Grid$ctl02$checkbox" /><label for="MainContent_Grid_checkbox_0">Value of KeyID</label> 
Run Code Online (Sandbox Code Playgroud)

由于所有名称都以“checkbox”结尾,因此您可以对名称以“checkbox”结尾的元素的更改事件应用函数。您没有指定这是一个 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> 
Run Code Online (Sandbox Code Playgroud)

这将确定复选框是否被选中,如果是,它将根据值设置其父级的背景颜色(<td>它位于 DataGrid 呈现的 HTML 内)。

同样,您可以转到下一个parent()并突出显示整行。

资源: jQuery 选择器

OnCheckedChanged —— 您将在后面的代码中而不是在 JavaScript 中处理的事件。