2011-08-06 6 views
3

私は宣言的にLinqDataSourceとDataListを作成し、マークアップでバインドしました。 ItemTemplateとEdit Templateを作成しました。ASP.Net DataListの問題

私は、DataLists oneditコマンドとoncancelコマンドを、コードの背後にあるメソッドにバインドしました。

<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

私がItemCommandイベントにバインドされて知っているとして、それは、動作しませんDataListコントロールのイベントのちょうど二次焼成であるようだ、と迎撃するつもりでしたDataListCommandEventArgs.CommandNameプロパティを使用して、それに基づいて何かを実行します。 [リンクの編集]ボタンをクリックすると、ItemCommandメソッドが起動します(コードボディは一切ありません).2回目のリンクの編集ボタンをクリックすると、ItemCommandメソッドはヒットしません。私はあなたの問題を複製することはできません

+0

こんにちはベン - ブラウザー上でフィドラーを叩くと、ここで何が起きているのかを見極めることができますか? –

+1

最初のコマンドが実行された後に生成されるHTMLを見ましたか? タグのコマンド属性はまだそこにありますか? –

答えて

0

、私はこのデモのコードを実行し、すべてのイベントとテンプレートがうまく働いた:

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

はあなたのイベントログにエラーを持っていますか?また、定義されたDataKeyFieldが表示されません。どのようにデータを選択していますか?

1

あなたのDataListコントロールの名前は: "MyDataList"

が、キャンセルイベントがPhotoDataListを呼び出します!

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