2011-08-06 63 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(); 
    }