私は、FormViews を Microsoft が私に期待する方法で動作させることに約 1 日苦労してきました。
ObjectDataSource.Inserting イベント ハンドラーで e.Exception と e.ReturnValue をキャッチできます。また、e.ObjectInstance をチェックすることで、ObjectDataSource.ObjectDisposing のオブジェクトの他のプロパティをチートしてチェックすることもできます。ハンドラーは ObjectDisposing ハンドラーの後に実行されるため、問題が見つかった場合でも、それに対応して FormView で e.KeepInInsertMode を true にする時間があります。
私の問題は、ユーザーが挿入フォームに入力した値がクリアされているように見えることです。
では、Insert メソッドが起動した後に FormView がクリアされないようにするにはどうすればよいですか?
(ASP.NET + VB を使用)
ここに自分のコードを投稿してもあまり効果がないと思います。コードを変更して、機密のビジネス ロジックを削除する必要があるので、ここでは省略します。
編集:
私は一時的で確かにひどくぎこちない解決策を見つけました(誰も問題の本当の解決策を見つけられない場合に備えて)。
次のように定義されたページ変数があります。
Dim eInsertArgs As FormViewInsertedEventArgs
そして、 ItemInserted ハンドラーで次のことを行います
If boolInsertErrorOccurred = False Then
e.KeepInInsertMode = True
eInsertArgs = e
Else
eInsertArgs = Nothing
End If
次に、各コントロールで、そのコントロールのデータバインディングイベントに次のようなものがあります。
If IsNothing(eInsertArgs) = False Then
Dim _sender As TextBox = sender
_sender.Text = eInsertArgs.Values("_FieldName")
End If
これの効果は、ASP.NET が FormView を既定の (空白の) テンプレートにバインドした後で、値を送信された値に戻すことです。
それほどひどい解決策を見つけるのを手伝ってください。:)