Используя Databinder.Eval в onclick флажка в сетке данных

<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 "Серверный тег не правильно сформирован". как я могу это сделать?

2 ответа

Если вы запустите свой код, он покажет вам undefined или ничего, так что есть несколько способов сделать этот подход, первый и самый простой, который вы должны изменить cb следующим образом:

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

и второй способ вы можете сделать это в code-behind на ItemDataBound как это:

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

эти два способа работают правильно.

Разобрался, вот что я сделал:

<asp:CheckBox ID="cb" runat="server" onclick=<%# "myCheckChanged('" + DataBinder.Eval(Container, "myid") + "') "%> />
Другие вопросы по тегам