2009-03-05 12 views
0

ページのすべてのコントロールをデフォルトにリセットしない新しいクエリ文字列を使用してポストバックを行う方法はありますか?私はそれにいくつかのチェックボックスコントロールを持つ "default.aspx"という名前のページを持っています。私はそれらをすべてチェックすることができますし、彼らは "default.aspx"へのポストバックで永続的(彼らはチェックされた状態またはチェックされていない状態を維持するという意味です)のままです。しかし、 "default.aspx?page = 2"にポストバックすれば、コントロールはすべてデフォルト状態に戻ります。それをやめさせる方法はありますか?クエリ文字列が変更されたときにコントロールを保持する

答えて

2

ここで覚えておくべきことは、新しいポストバックを行うたびに、ページクラスの新しいインスタンスで作業していることです。古いインスタンスは、Webブラウザに送信された時点で破棄されました。これを念頭に置いて、ポストバックの間に状態を維持できるという事実はかなり素晴らしいです。それはすべてそれがすべて同期するように起こらなければならないたくさんのことがあります。

これらのうちの1つはViewStateです。 ViewStateは、ページのフォーム内の特別な隠された入力要素です。新しいクエリ文字列を使用してページをリクエストすると、フォームのviewstateフィールドがPOSTされなくなります。あなたは本当にポストバックをもうやっていません。それはまったく新しいページの要求です。どのフォームからもPOSTデータがないため、ViewStateのデータが失われてしまい、ASP.Netに以前に行ったことのないものがありません。

+0

「ページ2」のリンクがあり、テキストボックスやチェックボックスをリセットせずに自分自身にポストバックするページが常にあります。私はテキストファイルにsomethigを書き込んで、次回のページ読み込み時にテキストファイルを読むことができたと思いますが、それが実際にどのように行われたのかは分かりません。 –

+0

もし彼らが実際に "ポストバック"しているのであれば、フォーム提出であり、クエリ文字列は変更できませんでした。あなたのページをこのように開発するのを止めるものは何もありませんが、あなたはPostBacksの喪失を補償する責任があります。 –

+0

あなたはGETメソッドではなくPOSTメソッドを使用する必要がありますか?私はフォームを持っていないことを除いて、それを行うことができます。私はASP.NETコントロールがフォームの必要性を置き換えることを期待していました。私はPearlやPHPでこれを書いていたはずです。私は間違いなく.NETでまだ販売されていない。 –

0

クエリ文字列を変更したときにどのようにポストバックしますか? ASP.netチェックボックスコントロール(runat = "server")を使用している場合は、ビューステートで永続化する必要があります。

Joelは、HTTPのステートレスな性質を克服するために、Pageクラスの新しいインスタンスが作成されたが、それがViewstateの目的であることは間違いありません。