2010-11-29 27 views
2

私はC#でASP.NETを使用しています。私はデータベースから照会され、項目を正しく表示する項目を持っています。ASP.NET Web UI ListViewは更新されません

ユーザーがテキストを入力し、AJAX-enhancedボタンを押してコメントをデータベースに挿入するコメント表を作成しました。この表には、下の表のリストビューが表示されます。

ただし、ユーザーがコメントを入力すると、テーブルは同じままで、更新されません。投稿をもう一度押すと、前のコメントは表示されますが、現在のコメントは表示されません。

は、私は以下を追加し、「コメントを投稿」ボタンを試してみました:

CommentsView.DataBind(); 

ありません運、それは更新されません。そして、マイクロソフトのあるスマートプログラマーは、ListViewクラスに単純な "ListView.Refresh()"関数を追加するのを忘れていました。

AJAXが情報を更新するためにテーブルを自動的に更新しない理由はわかりません。最新のデータをどのように表示するのですか?

+0

ユーザーがコメントを入力した後でCommentsView.DataSourceを更新しましたか? – David

+1

あなたはどのAJAX実装を使用していますか? MicrosoftのASP.NET AJAXを使用している場合は、おそらく、UpdatePanelをリフレッシュしてListViewの更新をトリガーできるように、ListViewの周りにUpdatePanelをラップする必要があります。 – KBoek

+0

"マイクロソフトのスマートなプログラマー.."あなたがメタの上にいない限り、たまにうわさはうまくいきません。 – Hogan

答えて

3

マイクロソフトのスマートプログラマーは、apsxページでのデータバインドの仕組みを理解しています。

これは、ページlifecycycleを理解することを含む。このドキュメントを読んで理解していれば、問題がはっきりしているはずです。

しかし、すぐに答えがあります:今は、ページinitのデータにバインドします。そのデータを変更する場合は、データソースに再バインドする必要があります。 .NETはそれ以外の場合はビューステートで自動的にキャッシュします。

データソースを再バインドしてviewstateを変更するために、「コメントを投稿」にコードを追加してください。

+0

もちろん、彼らは理解して、彼らはそれを作成しました。私はそれがキャッシュにあることがわかります。しかし、私はpageLoadが再びロードし、データを再クエリーすると考えました。私はデータを再クエリーし、新しいデータバインドを入れる機能を作った。ありがとう。 – Dexter

+0

@Dexter:キャッシュ内だけでなく、ビューステート内。 Viewstateはキャッシュと大きく異なり、ASP.NETの仕組みを理解する上で重要です。良い時代にこれを読んでください:http://msdn.microsoft.com/en-us/library/ms972976aspx#viewstate_topic3 – Hogan

+0

私が完全に理解しているか分からない、キャッシュと同じviewstateではないですか?なぜ彼らは違うのだろうか? – Dexter

0

単にリストビューを更新するために

listView.DataBind()

を行います。

+0

おそらくDataBind()がユーザーコントロール内のUpdatePanel内のコントロールからのイベントによってトリガーされたため、リストビューをUpdatePanelでラップする必要がありました。 – Resource