0
<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 の「サーバー タグの形式が正しくありません」というエラーが発生します。これどうやってするの?

4

2 に答える 2

1

コードを実行すると、表示されるundefinedか何も表示されないため、このアプローチを実行する方法がいくつかあります。最初の最も簡単な方法は、cb次のように変更する必要があります。

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

code-behindそして、次のように実行できる2番目の方法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].TextmyidCells

これらの 2 つの方法は正しく機能しています。

于 2015-02-02T07:55:41.450 に答える
0

方法を考え出した、これが私がしたことです:

<asp:CheckBox ID="cb" runat="server" onclick=<%# "myCheckChanged('" + DataBinder.Eval(Container, "myid") + "') "%> />
于 2015-02-04T16:20:38.303 に答える