2011-08-06 66 views
3

我已经声明创建了一个LinqDataSource和DataList并将它们绑定在标记中。我创建了一个ItemTemplate和Edit Template。ASP.Net DataList问题

我已经绑定了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(); 
    } 

谁能想到的原因?

---- UPDATE

看来,这只不过是在DataList控件的事件不工作的第二次烧制,因为我已经知道绑定到ItemCommand事件,并打算拦截DataListCommandEventArgs.CommandName属性,并根据它做些事情。如果单击编辑链接按钮,ItemCommand方法会触发(根本没有任何代码体),但第二次单击编辑链接按钮时,ItemCommand方法不会被击中。

+0

嗨本 - 任何在浏览器上F F Fiddler的机会都会揭示这里发生的事情吗? –

+1

你看过第一个命令被触发后生成的HTML吗? 标签中的命令属性是否仍然存在? –

回答

1

您DataList控件的名称是: “MyDataList”

但取消事件调用PhotoDataList!

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