【问题标题】:ASP.Net DataList problemASP.Net DataList 问题
【发布时间】:2011-08-06 15:14:46
【问题描述】:

我以声明方式创建了 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();
        }

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

    <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 方法。

【问题讨论】:

  • 嗨,Ben - 在浏览器上拍 Fiddler 是否有可能让我们了解这里发生了什么?
  • 您查看过第一个命令被触发后生成的 HTML 吗? 标签中的命令属性还在吗?

标签: c# asp.net .net


【解决方案1】:

您的 DataList 的名称是:“MyDataList”

但 Cancel 事件调用 PhotoDataList!

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

【讨论】:

    【解决方案2】:

    我无法复制您的问题,我运行了这个演示代码,所有事件和模板都运行良好:

    How to: Allow Users to Edit Items in DataList Web Server Controls

    您的事件日志中是否有任何错误?另外,我没有看到定义的 DataKeyField,你是如何选择数据的?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-30
      相关资源
      最近更新 更多