6

次のように、Page_LoadイベントでChangeModeメソッドを使用してFormViewのCurrentModeを挿入モードに設定しています。

if(!Page.IsPostBack)
{
    MyFormView.ChangeMode(FormViewMode.Insert);
}

FormViewの挿入テンプレート内に、AutoPostBackプロパティがtrueに設定されたDropDownListコントロールがあります。挿入テンプレート内には、他にもいくつかのDropDownListおよびTextBoxコントロールがあります。

DropDownListの選択を変更してポストバックが発生するたびに、コントロールに入力されたすべての値が失われます。奇妙なことに、ChangeModeを使用して、最初のページの読み込み後いつでもFormViewを挿入モードに設定しても、問題はありません。デバッガーを使用してコードをステップ実行しましたが、すべてが正しく行われているようですが、DropDownListのイベントハンドラーが実行された後、すべてがリセットされているようです。

ここで何が起こっているのですか?

更新:FormViewがrunat="server"およびenableviewstate="false"のdivタグ内にあることに気付きました。コンテナdivのビューステートを有効にすると、わずかに異なる動作が見られ始めました。FormViewは、最初のポストバック後も値を保持しませんが、後続のポストバックは正常に機能し、値は保持されます。

任意のアイデアをいただければ幸いです。

4

6 に答える 6

2

Walter Wang [MSFT] による他のフォーラムからのこの回答 - 2007 年 1 月 26 日 03:29 GMT

まず、データが変更されたことを FormView がデータ ソース コントロールから通知されたため、新しいデータを取得するために再バインドする必要があることが問題のようです。まだ挿入モードにあるので、実際にはこれを行うべきではありません。参照用の回避策があります: FormView から継承して独自の FormView コントロールを作成し、OnDataSourceViewChanged をオーバーライドし、挿入モードの場合は RequiresDataBinding を false に設定します。

public class MyFormView : FormView
   {
       protected override void OnDataSourceViewChanged(object sender,
EventArgs e)
       {
           if (this.CurrentMode == FormViewMode.Insert)
           {
               this.RequiresDataBinding = false;
           }
           else
           {
               base.OnDataSourceViewChanged(sender, e);
           }
       }
   }

私は自分の側でそれをテストしましたが、正しく動作しているようです。試してみて、結果を教えてください。

于 2010-03-04T14:09:54.163 に答える
0

EditItemテンプレートでビューステートが保持されないという同様の問題があります。設定EnableViewState = trueも役に立ちません。

私がしているのは関数を取得するOnUpdated()ことであり、関数の最後で、

e.KeepInEditMode = true;

お役に立てれば..

于 2010-08-05T03:09:07.197 に答える
0

ViewState は PageLoad の前に読み込まれます。私の推測では、PageLoad で Mode を変更すると、EditItemTemplate にあるコントロールの別のセットが再作成されます。デフォルトで編集モードに設定されていて、PageLoad でその行のコメントを外した場合、値は維持されますか? モードを切り替えなければ大丈夫です。

于 2009-04-17T15:35:03.897 に答える
0

試す

MyFormView.EnableViewState = true;
于 2009-04-15T19:44:08.777 に答える
0

FormView.ChangeMode(FormViewMode.Insert)

これは機能する必要があります。ID を確認し、インテリセンスを使用しますか?

私の例は、アイテムを追加するフォームビューです..

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    AddNewItemFormView.ChangeMode(FormViewMode.Insert)
End Sub

「if..then」なしでページの読み込み時に実行してみてください。うまくいけば、それは式ではなく、if コンテンツまたは構造であることがわかります。コントロール ID を意味のあるものにすることを忘れないでください。これにより、コントロール ID を使用したり、intelisense を介して呼び出したりする必要があるときに、間違いを犯す可能性が低くなり、簡単になります。

幸運。

:)

于 2009-07-02T20:23:21.917 に答える
-1

Page Init または Prerender イベントでモードを変更してみてください

于 2009-04-15T20:22:38.730 に答える