4

asp コントロールからデータを読み取り、データベース内のレコードを更新するコードを書いています。私は最後の日をデバッグしていて、以前に気づいたはずの何かに戻って追跡しました。

このコードは、最初にコントロールにデータベースの既存の値を入力します。SAVEをクリックすると、コントロールから現在の値が読み取られ、それらが保存されます。残念ながら、実際に行っていることは、変更が行われる前のコントロールの値を使用していることです。コントロールへの変更は見られません。

サンプルは次のとおりです。

<asp:TextBox ID="OtherCourseName_5" runat="server"></asp:TextBox>

btnSave_onClick()関数内の対応するビハインド コードは次のとおりです。

int object_number=5;

string other_course_name_string
    = "OtherCourseName_" + object_number.ToString().Trim();

TextBox ocn = utilities
   .utils
   .FindControlRecursive(this.Master, other_course_name_string) as TextBox;

私はFindControlRecursive()ウェブ上のどこかで見つけたを使用しています。確かに動作しますが、念のため、コントロールを として直接アドレス指定しようとしましたOtherCourseName_5.Text。に値を表示するだけでもOtherCourseName_5.Text、元の値が得られます。

この同じページを、新しいデータの入力とデータの編集の両方に使用します。データを入力するとうまくいきます。つまり、TextBoxコントロールが空からデータを持つように変更されたことを正しく認識します。ページで編集機能を呼び出したときだけです( を渡すことによってedit=true)。スイッチをクエリ文字列として追加することで、このように呼び出しedit=trueます (プログラムはそのスイッチを正しく読み取り、コードの適切な領域に到達し、コントロールの内容を除くすべての正しい値を出力します!)。

このページは複雑すぎて、すべてを掲載することはできません。本質的な詳細を伝えようとしました。単純なコーディング エラーを犯した可能性は十分にありますが、ページの処理方法を根本的に誤解している可能性の方が高いようです。

コントロールの値が変更されていないように見えることが知られているものはありますか?

注 1 : データを入力した後、別のフィールドに移動する必要があるのではないかと思いましたが、それを試してみましたが、まだ問題があります。

注 2 :TextBoxDropDownListコントロールの両方を使用していますが、両方で同じ問題があります。

注 3 : これらのコントロールはパネル上にあり、ページはSiteMaster. 私はそれについて何の問題も抱えていないし、そこに問題があるとは思わない.

4

1 に答える 1

8
protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        //populate controls with data from database
    }
}

ポストバック ハンドラーが評価される前にポストバックを実行すると、PageLoad イベントが発生します。

したがって、コントロールを再バインドすることを避けなければ、データベースからの値がロードされます。そして、ポストバックイベントはそれらをdbに保存します

Asp.net ページのライフサイクル (出典: microsoft.com )ここに画像の説明を入力

于 2013-10-17T15:16:51.903 に答える