<asp:DataGrid ID="dg" runat="server">
    <Columns>
        <asp:TemplateColumn>
            <ItemTemplate>
                <asp:CheckBox ID="cb" runat="server" onclick='myCheckChanged("<%#DataBinder.Eval(Container, "DataItem.myid")%>")' />
            </ItemTemplate>
        </asp:TemplateColumn>
    </Columns>
</asp:DataGrid>


这可以运行,但是当我单击浏览器中的复选框时,出现js错误。我尝试了单引号和双引号以及转义的所有组合,但是我遇到了js错误或.net“服务器标记格式不正确”错误。我怎样才能做到这一点?

最佳答案

如果您运行代码,它将显示为undefined或什么都不显示,因此有一些方法可以执行此方法,首先,最简单的方法是将您的cb更改如下:

<asp:CheckBox ID="cb" runat="server" onclick='<%# string.Format("myCheckChanged(\"{0}\")", Eval("myid")) %>' />


第二种方法可以在code-behindItemDataBound中像这样:

1-将您的“ DataGrid”更改为:

<asp:DataGrid ID="dg" runat="server" OnItemDataBound="dg_ItemDataBound">
        <Columns>
            <asp:TemplateColumn>
                <ItemTemplate>
                    <asp:CheckBox ID="cb" runat="server" />
                </ItemTemplate>
            </asp:TemplateColumn>
        </Columns>
    </asp:DataGrid>


2在code-behind中实现dg_ItemDataBound,例如:

 protected void dg_ItemDataBound(object sender, DataGridItemEventArgs e)
    {
        if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
        {
            CheckBox ch = (CheckBox)e.Item.FindControl("cb");
            ch.Attributes.Add("OnClick", string.Format("myCheckChanged({0});", e.Item.Cells[1].Text));
        }
    }


注意:在此片段e.Item.Cells[1].Text中,您必须知道myid在哪个Cells

这两种方式均正常运行。

关于javascript - 在DataGrid的复选框的onclick中使用Databinder.Eval,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28269587/

10-13 00:15