5

私は、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 を既定の (空白の) テンプレートにバインドした後で、値を送信された値に戻すことです。

それほどひどい解決策を見つけるのを手伝ってください。:)

4

1 に答える 1

1

FormView コントロールから継承する独自のサーバー コントロールを作成する必要があります。

Public Class MyFormView
     Inherits FormView

Protected Overrides Sub OnDataSourceViewChanged(ByVal sender As Object,
ByVal e As EventArgs)
     If (MyBase.CurrentMode = FormViewMode.Insert) Then
           MyBase.RequiresDataBinding = False
     Else
           MyBase.OnDataSourceViewChanged(sender, e)
     End If
End Sub

End Class

このページをご覧ください: http://www.dotnetmonster.com/Uwe/Forum.aspx/asp-net/76885/FormView-Insert

于 2011-07-14T16:55:01.030 に答える