2017-06-05 11 views
0

DetailsView1の変更をDBにコミットする前に、DetailsView2の項目が0であることを確認します。しかし、私はエラーを報告し、ユーザーが編集を続行できるようにしたいだけです。現在、DetailsView1で[更新]をクリックすると、ページが消去されます。ここでウィザードの一部としてDetailsView更新をキャンセルすると、フォームがクリアされるのはなぜですか?

protected void DetailsView1_Updating(object sender, DetailsViewUpdateEventArgs e) 
{ 
    if (DetailsView2.Rows[0].Cells[1].Text != "0") 
    { 
     DetailsView2.Rows[1].Cells[1].Visible = true; // Display error message 
     e.Cancel = true; 
    } 
} 

フロントエンドです:

ここの背後にあるコードです

<asp:DetailsView 
    ID="DetailsView1" 
    runat="server" 
    AutoGenerateRows="False" 
    DataSourceID="ObjectDataSource1" 
    DefaultMode="Edit" 
    OnItemUpdating="DetailsView1_Updating"> 
    ... 

これらの両方のDetailViewsは、ウィザードの一部ですが、私は何の違いを作ることかどうか分かりません。

+0

通常、これはポストバック時のデータバインディングの問題が原因です。データのバインド方法を見てみましょう。これは、form_loadイベントで失われている可能性があります。ブレークポイントを追加して、データが各ポストバックに適切にバインドされていることを確認します。 – tgolisch

答えて

0

フォームが編集するように設計されたオブジェクトのIDをクリアする、ItemCommandイベントのリスナーがありました。新しいオブジェクトがウィザードで選択されると、そのIDはとにかに上書きされるため、単純にそのロジックを削除しました。これで、検証後にデータが保持され、検証が失敗した場合に修正できます。

コードビハインド内のすべてのメソッドにブレークポイントを設定し、コマンドフローを監視するだけで、エラーのあるイベントハンドラが見つかりました。

関連する問題