
お世話になります、よろしくお願いします。
VisualStudio2003でASP.NET(VB)とJavascriptを使ってサイト製作をしています。
ラジオボタンにJavascriptを入れて、項目の表示/非表示を切り替えています。(CSSのdisplay:noneとinlineを切替)
これとは別に、ドロップダウンリストが2つ(A,B)あり、Aのドロップダウンリストを変更するとPostBackして、Bの選択肢が変化するといった風に作成しています。
ここで問題が発生し、PostBackが発生すると、項目の表示が初期状態に戻ってしまいました。
あれこれと考えて、Aにも項目の表示/非表示を切り替えるJavascriptを付けたのですが、どうもJavascriptが実行されてからPostBackが発生しているようで、お手上げです。
PostBackが発生しても、表示をそのままにできる方法は無いのでしょうか?よろしくご教授下さい。
A 回答 (7件)
- 最新から表示
- 回答順に表示
No.7
- 回答日時:
ポストバック間で状態を保存したいコントロールには、EnableViewStateをTrueにしてください。
サーバコントロールのインスタンスはポストバックを超えて保持されます。
また、PageLoadイベント内でコントロールの初期化を行う場合は、
IsPostBackプロパティを参照し、初期アクセスとポストバックで分けてください。
そうでないと、アクセスのたびに初期化が起きます。
#ページのインスタンスはページアクセスの度にnewされます。
#そのため、変数やコントロールの値はすべて初期化されます。
#ポストバックをまたぐには、SessionとViewStateを使用します。
Atras.NETを使用しないのであれば、
No5のようにRegisterStartupScriptでするのが正解です。
クライアントサイドでの変更もこれで対応します。
なお、最初の回答のようにダミーコントロールの使用は避けてください。
Page.ViewStateを利用してください。
Me.ViewState("aaa") = ・・・・
No.6
- 回答日時:
PageLoadイベントで以下のようにすれば何とかなると思います。
Dim sb_script As String
sb_script = "<script Language='JavaScript'>" & vbCrLf & _
"onload=displayChg();" & vbCrLf & _
vbCrLf & _
"</script>"
RegisterClientScriptBlock("openwin", sb_script)
また、この方法とは全く別に、AドロップダウンとBドロップダウンの連動にAjaxを利用する方法もあるのではないでしょうか?この方法だとリロードが発生しません。
No.5
- 回答日時:
ANo.3様 の通りですが、
「PageLoadの後にJavascript実行したい」ということ、
開発環境がVS2003であれば、
PageクラスのRegisterStartupScriptを使用してJavaScriptを
設定してください。
ブラウザに表示された後、設定したJavaScriptが走るはずです。
No.4
- 回答日時:
ん? んん?
すみません ちょっと問題を整理します
<条件>
・ラジオボタンで項目の表示/非表示を設定している
・ドロップダウンリストがA、Bの2個ある
・Aを選択後、PostBackが発生させてBの選択肢を変化させている
<現象>
・Aを選択後に項目の表示が初期状態に戻る
すべての項目が非表示になっていた?ってことですよね?
<原因>
PostBack発生後ページが再表示されるが
その際、ラジオボタンのJavaScriptが実行されないのでDIVタグに埋め込まれていた初期状態の「style="DISPLAY:none"」が適用されて
すべての項目が非表示になってしまう
現在 上記のように把握しているのですが
間違いないでしょうか?
ということであれば…
あまり難しく考えずに簡単にいきましょう
そのJavaScriptが埋め込まれているaspx側に
window.onload = _displayChg;
を追加するというのはどうでしょう?
ページを表示する際には必ず「_displayChg」を実行させて
項目の表示/非表示を設定し直します
ラジオボタンの初期値は設定する必要がありますが…
window.onloadはページが表示されるときに発生しますので
PostBack発生後にJavaScriptが実行されるようになります
No.3
- 回答日時:
> PostBackが発生しても、表示をそのままにできる方法は無いのでしょうか?
クラアントスクリプトでスタイルを切り替えたという情報はサーバに送信されない。
ラジオボタンの値は送信されるので、「項目の表示/非表示を切り替え」と同じ事をサーバ側で行えばよい。
No.2
- 回答日時:
ん? なんか勘違いをしていたようです…
それでしたら
PageLoad時にJavaScriptを再度実行するしか手はないようですね…
どのようなJavaScriptを実行されているのか
教えていただけないでしょうか?
この回答への補足
返答が遅れてしまい、申し訳ありません。
Javascriptはaspx側に記述していますが
function _displayChg(){
var objAri = document.Form1.rblKBN[0];
var objNasi = document.Form1.rblKBN[1];
if(objAri.checked == true){
hoge.style.display = "inline";
}else if (obNasi.checked == true){
hoge.style.display = "none";
}
と記述し、表示/非表示したいコントロールを
<DIV id="hoge" style="DISPLAY:none"></DIV>
で囲っています。
No.1
- 回答日時:
おそらくPostBack発生後 PageLoadイベントが発生して初期状態に戻っているのでしょう
これは仕様ですので仕方がないです
回避方法として手頃な方法は
ページ中にダミーコントロールを用意して
PageLoadイベント(1回目)でダミーコントロールにフラグをたてるようにする
PostBack発生後のPageLoadイベント(2回目以降)では
ダミーコントロールにフラグがたっていればExitSubみたいな感じにすればよろしいんではないでしょうか?
この回答への補足
回答ありがとうございます。
Page_Loadイベント内でPostBackか非PostBackなのかの判断は行っているのですが、やはり初期状態に戻っています・・・
PostBack時の処理はドロップダウンリストBだけを初期化して、項目を変更しています。
CSSの表示切替を別の手段で行った方がいいのでしょうか・・・
現在、仕方無くコントロールのvisibleをfalseにして表示切替を行っていますが、これだとコントロールのある部分に空白が出来てしまい、見栄えが悪いです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
ポストバック時の画面スクロール位置の保持
Microsoft ASP
-
ASP.NET(VB)VBソースからJavascriptの関数を呼ぶには
Microsoft ASP
-
TextChangeイベントが発生しない
JavaScript
-
-
4
ポストバック(__doPostback)へ割り込み
Microsoft ASP
-
5
ASPで画面間のパラメタ受け渡し
Microsoft ASP
-
6
Page_Load時にボタンクリックイベントを実行するには?
Microsoft ASP
-
7
ページにJavaScriptを埋め込むには?
Microsoft ASP
-
8
マスターページからコンテンツページのメソッドを実行したい
Microsoft ASP
-
9
javascriptからサーバサイドの処理を呼び出す方法を教えてくださ
JavaScript
-
10
【C#】Page_Loadさせない方法について
その他(プログラミング・Web制作)
-
11
ASP.NETのコントロールの値をJavaScriptで取得
JavaScript
-
12
asp.netにてgridviewの列を動的にボタンやチェックボックスを追加して実装したいのですが具
Microsoft ASP
-
13
IEからEdgeへの移行に伴うIMEの状態(ime-mode)
HTML・CSS
-
14
Javascript_submit()完了後に処理したい
JavaScript
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
calendarコントロールの表示月...
-
VB2005 DateTimePickerのカレン...
-
PageLoadの後にJavascript実行...
-
VB.netでボリュームレベルメー...
-
C#のコンボボックスからのカレ...
-
VBAでHTTPログイン
-
getParameterで値が取得できず...
-
コネクション・セッション・ト...
-
c# 文字列の最後から1文字削除...
-
PHPからWindowsログインユーザ...
-
ボタンをクリックした時に、入...
-
Webページ上のボタン等の位置を...
-
GridViewの項目編集(初歩)
-
XMLHTTPを用いて認証が必要なUR...
-
WCFのwsDualHttpBindingについて
-
エクセルVBAで画面の大きさを取...
-
複数選択のListBoxでClickイベ...
-
Fancyboxのiframe内に閉じるボタン
-
【VB6】 変数1 = 変数1 Or $H2
-
Accessの画面更新を一時的に停...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Javascriptでページ内容全体を...
-
ACCESS2010 WEBブラウザーコン...
-
PageLoadの後にJavascript実行...
-
ASP.NET(VB)でのデータグリッド...
-
VS2005 ASP.NET GridView...
-
ASP.NETのWebフォームでカレン...
-
VB.netでボリュームレベルメー...
-
VB2005 DateTimePickerのカレン...
-
スクリプトやActiveXの制限で表...
-
フォームアプリでのカレンダー...
-
calendarコントロールの表示月...
-
ASP.NET SiteMapPathコントロー...
-
Windows XP スタイルのデザイン...
-
C#のコンボボックスからのカレ...
-
更新処理の進行状況
-
【C#】 『monthCalendar』 の質問
-
スタディプラスのストップウォ...
-
ASP.NET2.0 GridViewのページャ...
-
コネクション・セッション・ト...
-
Accessの画面更新を一時的に停...
おすすめ情報