0

ユーザーが変更できるデフォルトのテキストボックスを含む Web ページのページ読み込みに動的に構築されたテーブルがあります。また、ユーザー入力値にもいくつかの検証があります (たとえば、入力は 0 未満にすることはできません)。ユーザーがテーブルを送信すると、有効な入力のみが保存され、ページが更新され、保存された値がプルされ、再構築時にテーブルに入力されます。何らかの理由で、ページを送信して再読み込みした後もテキスト ボックスに無効な入力が表示されますが、永続的ではありません。この問題はラベルでは発生しません。

この問題を引き起こしているテキスト ボックス コントロールに特別に組み込まれているものはありますか? おそらく状態を保存する場所はありますか(ViewStateフラグをfalseに設定してみました)?これはページのライフサイクルの一部にすぎませんか?

テキスト ボックスは、Page_Load イベントから呼び出されるメソッドに組み込まれています。

void Page_Load(object sender, EventArgs e)
{
//page initialization...
ValidateData(); //This is where the current data is verified, and stored if valid
BuildTable(); //This takes that stored value for the text
}

void BuildTable
{ 
tbTable = new Table();  
tbRow = new TableRow();
tbCell = new TableCell();
TextBox tb = new TextBox();
tb.text = some stored value;
tbCell.Controls.Add(tb);
tbRow.Cells.Add(tbCell);
tbTable.Rows.Add(tbRow);
divFromPage.Controls.add(tbTable);
}

この問題を解決するためにさらに情報が必要な場合は、お知らせください。

4

2 に答える 2

0

編集:あなたの問題を再現した後、私は次の結論に達しました。
問題はビューステートではないと思いますが、送信したフォームデータは、返す入力要素と同じ名前であるため、aspはこれらの値を再入力しているだけです。
同じdivに追加するため、動的に生成しても、結果は常に同じです。これにより、2つの解決策が導き出されます:):
私の解決策nr 3はまだ有効です。試してみましたが、ボタンをクリックすると、投稿されたデータがテキストボックスに忍び寄ることなく、意図したとおりにリダイレクトされます。
このステートメントはそれを処理します:

Response.Redirect("~/test.aspx");

または、ランダムIDを生成して、返される入力フィールド名が送信されたものと異なることを確認することもできます。すべての名前を変更する必要はありませんが、たとえばテーブルIDが異なる場合、テーブル全体に送信されたデータが入力されなくなります。

ページロードの直後にデータが失われるため、ページロードにif(IsPostBack)が必要になる場合があることに注意してください(その前に保存を処理しない限り)


ポストバックを実行している場合、asp.netはそのビューステートを使用して、すべてのテキストボックス、テキストフィールド、およびその他すべてのフォーム要素(非表示の入力タイプを含む)を維持します。
私は現在あなたの問題に対する3つの解決策を見ています:
データベースからデータをロードする前に(私はあなたがそうすると思います)、あなたはすべてのテキストフィールドを一掃することができます。初めての訪問では、空白であるため、これはコース外では無意味になります。しかし、ポストバックの後、実際にはテキストフィールドが消去されます。

aspが状態を保持しないように、これらのテキストボックスのビューステートを無効にすることができます。テストが機能しなかった理由はわかりませんが、機能するはずです。このアプローチを選択した場合は、実際のコードを使用して質問を自由に編集してください。

私の個人的なお気に入り:ページをリダイレクトします。結果を返し、ページにポストバックを発生させる代わりに、次の手順を実行します。ユーザーが保存ボタンを押した後、データを保存してからResponse.Redirectを実行できます。現在のページにリダイレクトします。ブラウザはページにリダイレクトされ、ビューステートは関係しません。

于 2012-05-11T07:41:54.563 に答える
0

これを理解したところ、一種の D'oh の瞬間です。PreRender イベントにデータを入力したところ、問題なく動作しました。すべての入力に感謝します。

于 2012-05-14T19:35:00.710 に答える