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

4
我正在尝试运行以下代码。
 <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="server"的情况下工作。 那么,针对此问题有什么解决方法?

尝试在Databinder.Eval之外使用单引号而不是双引号。例如:ID='checkBox-<%#DataBinder.Eval(Container.DataItem,"KeyID")%>' - lahsrah
可能是重复的问题:在ASP.NET控件的样式属性中使用DataBinder.Eval()(关键点:您不能仅对属性值的一部分使用DataBinder.Eval。) - Kirk Woll
@sylon,单引号也不起作用。ID='checkBox-<%# DataBinder.Eval(Container.DataItem, "ID")%>' 错误25:'checkBox-<%# DataBinder.Eval(Container.DataItem, "ID")%>' 不是一个有效的标识符。 - RockOnGom
1
为什么需要设置复选框的ID?当绑定时它会自动设置。 - MikeSmithDev
@KirkWoll 我试过了。两个不同的属性都在运行。我认为问题与id有关。 - RockOnGom
显示剩余2条评论
1个回答

5
你不需要设置 CheckBox 的 ID 就可以实现你想要做的事情(改变背景颜色)。你的 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> 

由于所有名称都以“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> 

这将确定复选框是否被选中,如果是,则根据其值设置其父元素的背景颜色(即DataGrid呈现HTML中它所在的<td>)。

同样地,您可以向上遍历到下一个parent()并突出整行。

资源: jQuery选择器

OnCheckedChanged - 这是在代码后端而不是JavaScript中处理的事件。


你正在使用jQuery吗?你可以将它更改为:$(this).parent().parent().css('background-color', 'yellow');(额外的parent()将获取<td>的父元素,即<tr>)。如果您不使用jQuery,我可以添加仅JavaScript选项。 - MikeSmithDev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接