我已经声明性地创建了LinqDataSource和DataList并将它们绑定在标记中。我创建了一个ItemTemplate和Edit Template。

我已将DataLists的oneditcommand和oncancelcommand绑定到后面代码中的方法。

<asp:DataList ID="MyDataList" runat="server" DataSourceID="LinqDataSource1" RepeatDirection="Horizontal"
    Font-Bold="False" Font-Italic="False" Font-Overline="False" Font-Strikeout="False"
    Font-Underline="False" HorizontalAlign="Center" RepeatColumns="4"
    oneditcommand="MyDataList_EditCommand"
    oncancelcommand="MyDataList_CancelCommand"
    >

<ItemTemplate>
    <div style="margin: 5px;">
        <asp:LinkButton Text="Edit" CommandName="Edit" style="float:right" runat="server" />
    // Other markup
    </div>
</ItemTemplate>


当我单击ItemTemplate中的LinkBut​​ton时,它将运行以下代码:

protected void DataList_EditCommand(object source, DataListCommandEventArgs e)
        {
            MyDataList.EditItemIndex = e.Item.ItemIndex;
            MyDataList.DataBind();
        }


这可以正常工作,并将数据列表中的选定项目置于编辑模式。
编辑模板:

    <EditItemTemplate>
        <div style="margin: 5px;">
            <asp:LinkButton Text="Cancel" style="float:right"
                runat="server" CommandName="cancel" CausesValidation="false"/>
      //other markup
        </div>
    </EditItemTemplate>


当我单击编辑模板中的“取消”按钮时,它不会在后面的代码中触发该方法(不会命中断点)。

取消时应运行的代码永不运行,因此我无法退出编辑模式回到正常读取模式:

protected void MyDataList_CancelCommand(object source, DataListCommandEventArgs e)
    {
        PhotoDataList.EditItemIndex = -1;
        PhotoDataList.DataBind();
    }


谁能想到这个原因?

----更新

似乎只是DataList上事件的第二次触发不起作用,因为我知道绑定到ItemCommand事件,并且将要拦截DataListCommandEventArgs.CommandName属性并基于此执行某些操作。如果单击“编辑”链接按钮,则将触发ItemCommand方法(根本没有代码体),但是第二次单击“编辑链接”按钮,则不会命中ItemCommand方法。

最佳答案

您的DataList的名称是:“ MyDataList”

但是取消事件会调用PhotoDataList!

protected void MyDataList_CancelCommand(object source, DataListCommandEventArgs e)
    {
        PhotoDataList.EditItemIndex = -1;
        PhotoDataList.DataBind();
    }

10-02 01:24