Используя 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") + "') "%> />