「夫を成功」へ導く妻の秘訣 座談会

ASP.NETで画面の初期化される(IsPostBackがFalseとなる)事象について

お世話になります。
ASP.NETで開発したWebシステム(以下、当システム)で、処理ボタンを押すと画面が初期化される
事象が発生しています。
(正確には、Page_LoadイベントでIsPostBackが何故かFalseとなり、初期化処理を通過してしまう事象です。)
通常は上記事象は発生しないのですが、Windows 2000だと発生頻度は高いようです。
原因がどうしても判明できず、ご質問させて頂きました。

-----

[動作環境]
<クライアントPC>
Windows 2000 Professional/XP Professional
IE6.0

<サーバー>
Windows Server 2003
IIS6.0
ASP.NET2.0 (.Net Framework 2.0)


[開発環境]
VS2005
VB ASP.NET Webアプリケーション

-----

事象について詳しく確認してみたところ、以下が判明しています。

(1)クライアントPCで、最初に別の社内システムのページを開き、その後お気に入りのリンクより
 当システムを同一ブラウザウィンドウ内に開いた後、自動的に別ウインドウ(IEのアドレスバーや
 メニュー無しの状態)で開かれた後、処理ボタンを押すと画面が初期化される事象が発生する。
 (発生しないときもある)
 最初から当システムのページを開き、自動的に別ウインドウで開かれた後、処理ボタンを押す操作
 では今まで1度も事象が発生していない。
 (別ウインドウで開く動作は、Javascriptのwindow.openで開いている)
 社内システムと当システムは、同一サーバー(同一サイト)内で動作している。
(2)上記の社内システムでは、数分間隔で自動リロード処理が走り、ページがリロードされる仕様と
 なっている。
 上記ページリロード後に、上記操作により事象が発生していた。
 試しに社内システムのページを開き、IEの更新ボタンを押して手動で再読み込み後に、同様の操作
 を行うと事象が発生した。
 社内システムでリロード無しで、当システムのページを開いても事象は今まで発生していない。
(3)当システムでトレースログを出力し、事象発生時の動作を確認したところ、処理ボタン(サーバー
 コントロール)でのポストバック時に、Page_Loadイベントで何故か IsPostBack が False となり、
 画面初期処理(初期化ロジック)を通過してしまっていることが判明。
 (POSTメソッドで送信しており、必ず IsPostBack は True となるはず)
(4)開発環境で、デバッグし動作確認しようとしたが、事象は発生しなかった。

上記(1)(2)については事象発生しないケースもあり、社内システムが直接関わっているかは断定できない状況です。
ただ社内システム以外のページを最初に開き、同様の操作を行っても事象は発生していません。

上記と同様の事例やその他何か考えられる事がございましたら、宜しくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

(4)開発環境で、デバッグし動作確認しようとしたが、事象は発生しなかった。


IISの「接続のタイムアウト」以上の時間そのままにして再読み込みするとどうなりますか?
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

開発環境でIISの「接続のタイムアウト」を1分に変更し、
1分以上放置して操作しても、事象は発生しませんでした。

お礼日時:2010/07/02 18:33

> (POSTメソッドで送信しており、必ず は True となるはず)



POSTでもASP.NETがポストバックと認識しなければ、IsPostBack = Trueとならない。

正常時と異常時でポスト変数に違いがあるか?
CookieのSessionIDは途切れていないか?
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

ポスト変数(HttpWebRequest)の情報は全て列挙してまで確認していませんが、
ページ上のTextBoxの値をRequest.Paramなどでトレース出力してみると、
正常時では当然取得できていましたが、異常時では取得できませんでした。
CookieのSessionID は確認できていません(Cookieは使用していない為)が、
おそらく期限切れか無効な状態になっているのでは? と考えられます。
ただ、開発環境ではセッションの接続タイムアウト時間を経過しても、
問題無く動作しました。
(当システム内でSession変数を使用して処理していないため)

なぜPOSTされた値を取得できないのか、原因が分かりません。

お礼日時:2010/07/02 18:46

別の社内システムでSessionの初期化処理等行われていませんでしょうか?

この回答への補足

先ほど確認したところ、

社内システムのリロードが無くても、頻度はかなり低いですが、
事象が発生しました。
また、window.openで別ウィンドウでの展開でなく、
社内システムと同一ウィンドウ内にそのままページ遷移して表示し、
操作しても、事象が発生しました。

何か考えられますでしょうか?

補足日時:2010/07/02 16:27
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

すいません、別の社内システムの動作は確認できないのですが、
当システムではSession変数を使用していないため、
初期化処理が行われても問題無く動作可能と考えています。
(使用していなくてもSessionの初期化で何か影響がありますでしょうか?)

お礼日時:2010/07/02 16:23

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QASP.NETでのメッセージ画面を出すには

はじめまして。
ASP.NET(C#)で、開発をしています。
例えば、内部である処理が終わった後に「完了!」みたいなメッセージ画面をポップアップさせたいと思っております。いろいろ調べてはいるんですが、方法がわかりません。JSを使わなければならないのかなとは思いますが、具体的な方法がわかりません。
よい方法がありましたら、教えていただけないでしょうか。よろしくお願いいたします。

Aベストアンサー

確認は取れていませんが、多分以下のHPの内容でいけると思いますが…。
参考に如何でしょうか。

・ASP.NETでメッセージボックス(OK・NO)の処理について
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=5952&forum=7&6

・Webアプリでメッセージボックスを使いたい
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=1644&forum=7&7

QASP.netで、CheckBoxListのSelectedIndexChangedが発生しません!

はじめまして、宜しくお願いします。

ASP.netのC#で開発を行っています。

チェックボックスリストのチェックボックスをチェックした際に、
SelectedIndexChangedイベントが発生しサーバ側で受け取れる
はずだと思っているのですが、全くポストバックされていないようです。

プロパティの「AutoPostBack」はTrueにしています。

ほかに条件はありますでしょうか?
ご存知の方がいらっしゃいましたら、宜しくお願い致します。

Aベストアンサー

もしかして、先ほど、
http://okwave.jp/qa4974802.html
で質問したやり方で、動的に選択項目を生成しているからイベントが発生しないとか?いや、それはないかなぁ。AutoPostBackもTrueみたいですし。

一応、イベント設定方法のやり方は2種類あるのでどちらかお好きな方でおためしください。

方法1:
CheckBoxList を定義している個所に
「OnSelectedIndexChanged="イベント処理用メソッド名"」
を記述する

例:
<asp:CheckBoxList
ID="CheckBoxList1"
runat="server"
AutoPostBack="true"
OnSelectedIndexChanged="CheckBoxList1_SelectedIndexChanged">
</asp:CheckBoxList>

方法2:
Page_Init や Page_Load などのイベントで、
CheckBoxList1.SelectedIndexChanged += new EventHandler(イベント処理用メソッド名);
を記述する

例:
protected void Page_Init(object sender, EventArgs e)
{
  CheckBoxList1.SelectedIndexChanged += new  EventHandler(CheckBoxList1_SelectedIndexChanged);
}

protected void CheckBoxList1_SelectedIndexChanged(object sender, EventArgs e)
{
  // 選択された時の処理を書く
  if (CheckBoxList1.SelectedIndex > -1)
  {
    Label1.Text = CheckBoxList1.SelectedValue;
  }
  else
  {
    Label1.Text = string.Empty; 
  }
}

また、わからなければご連絡ください。

もしかして、先ほど、
http://okwave.jp/qa4974802.html
で質問したやり方で、動的に選択項目を生成しているからイベントが発生しないとか?いや、それはないかなぁ。AutoPostBackもTrueみたいですし。

一応、イベント設定方法のやり方は2種類あるのでどちらかお好きな方でおためしください。

方法1:
CheckBoxList を定義している個所に
「OnSelectedIndexChanged="イベント処理用メソッド名"」
を記述する

例:
<asp:CheckBoxList
ID="CheckBoxList1"
runat="server"
AutoPo...続きを読む

Q画面のリフレッシュを意図的に行いたい

Metaタグを使用せずに画面リフレッシュをしたくって、
以下のプログラムを作成したのですが、
上手く動作しません。

やりたいこととしては、以下の3つです。
 ・METAタグの使用はしたくない(都合上使用できない)。
 ・必ずMain_LOAD()をコールした後にリフレッシュさせたい。
 ・★処理を行った後にrefreshTest.aspをリフレッシュしたい。


---ASPファイル refreshTest.asp ここから--------
<SCRIPT language="JavaScript">
<!--
function refresh()
{
location.href = "rereload.html";
setTimeout('refresh()', 3000);
}
// -->
</SCRIPT>
<%
Sub Main_LOAD()
On Error Resume Next
%>

5秒後に再読み込みします
~ここに色んな処理を記述したい~
<%
End Sub
%>

<SCRIPT language="JavaScript">
<!--
//★処理が終わった時点で、↓を行う
refresh();
// -->
</SCRIPT>
---ASPファイル refreshTest.asp ここまで--------

長くなってすみませんが、宜しくお願い致します。

Metaタグを使用せずに画面リフレッシュをしたくって、
以下のプログラムを作成したのですが、
上手く動作しません。

やりたいこととしては、以下の3つです。
 ・METAタグの使用はしたくない(都合上使用できない)。
 ・必ずMain_LOAD()をコールした後にリフレッシュさせたい。
 ・★処理を行った後にrefreshTest.aspをリフレッシュしたい。


---ASPファイル refreshTest.asp ここから--------
<SCRIPT language="JavaScript">
<!--
function refresh()
{
location.href = "rereload.html";...続きを読む

Aベストアンサー

失礼します。

>JavaScript→クライアントスクリプトは理解しています。
残念ながら理解されていればこの質問にはならないと思います。
setTimeoutで呼ばれるプロシージャで再読み込みするのに
>必ずMain_LOAD()をコールした後にリフレッシュさせたい。
といっても、Main_LOADはサーバサイドなので
この考え方自体が不可能でしょう。
プロシージャ抜きでサーバサイドの先頭から記述すれば
リフレッシュ時の最初で動作します。

Qvb.netで画面のコントロールId名を変数で動的に制御し処理する方法

以下のような処理がしたいです。
実現方法をご存知でしたらご教授下さい。

画面のコントロールText1~Text3があります。
For~Nextでこのコントロールに値をセットしたいです。

For i = 1 To 3
  Texti.Text = i
  ※このiのTextの後ろのiの部分を1~3と動的に変更し、各Textに値を設定したいです。
Next

Aベストアンサー

こんにちは、webでは、findcontrolを使うみたいです。

いかに、参考URLから、引用すると
***********************************
Dim L, U, i As Integer
Dim tx As System.Web.UI.WebControls.TextBox
L = LBound(dat)
U = UBound(dat)
For i = L To U
'コントロール名を探し出す
tx = FindControl("TextBox" & CStr(i))
'見つかったコントロールのTextプロパティに代入
tx.Text = dat(i)
Next

******************引用終わり*******
このようにすると良いみたいです。
asp findcontrolで、検索すると、
結構ヒットするみたいです。

参考URL:http://natchan-develop.seesaa.net/

QWebページ上のボタン等の位置を移動したい。

こんにちわ。
いまASP.NETのWebフォームにパネルを置いて,その上にボタンなどのオブジェクトを配置しようとしています。
ところがフォームに直接ボタンを配置するときは,
任意の位置に配置できるのですが,
パネルの上だと任意の位置に配置できません。
VBのようにプロパティでx/y座標を指定しようと思ったのですが,
それらしいプロパティが見当たりません。
どうすれば任意の位置に配置できるでしょうか?
教えてください。よろしくお願いします。

Aベストアンサー

#1 です。

WebForm で何もコントロールを選択していない状態か、新規の WebForm で [レイアウト]-[位置]-[自動配置オプション] を選択。
<オプション> ダイアログの左側 [HTML デザイナ]-[CSS 配置] が開いてる状態になりますので、右側の配置オプションで [ツールボックス、貼り付け、またはドラッグ・・・] にチェックを入れて「絶対配置」を選択して [OK] をクリック。
コレ以降フォームに貼り付けたコントロールは絶対配置になりますので好きな場所に移動できます。

って方法もありますね。

Qポストバック時のDatasourceバインド処理について

いつもお世話になっております。
VS2005 FrameWork2.0にて
ASPポストバックのDatasourceの挙動について質問させて下さい。

使用コントロールはDatasourceプロパティを持っていればなんでもいいのですが、例えばデザイナで、

DropDownList.DatasourceIdに SqlDatasourceを指定し、
SqlDatasourceのSelectQueryに" Select * from Table1 "
なんて指定しておけば、いくらポストバックが発生しても
常にDropDownList.DatasourceがNullでない状態で
、なおかつSQLサーバーをプロファイルしていても
Select文の発行は初回の1回だけでした。

でも、
手動で
DropDownList.DataSource = GetDataSource1()
DropDownList.DataBind()

※GetDataSource1()は、データベースをOpenしてDataTableを返すメソッド

みたいにコード上でバインドしておくと、
次のポストバック時にDataSourceがNULLになっています。

毎ポストバック時にDataBind()を書くと、
毎回Open~Select処理が走ってしまい嬉しくありません。

手動バインドさせる場合のスタンダードな書き方ってあるのでしょうか?

こういったことがナンセンスで、
本来は
[DataObjectMethod(DataObjectMethodType.Select)]属性をつけたメソッドを用意してObjectDatasourceのSelectメソッド等でやるのがスタンダードなんだよ
といったご指摘もあれば全てお聞きしたいと思っております。

よろしくお願い致します。

いつもお世話になっております。
VS2005 FrameWork2.0にて
ASPポストバックのDatasourceの挙動について質問させて下さい。

使用コントロールはDatasourceプロパティを持っていればなんでもいいのですが、例えばデザイナで、

DropDownList.DatasourceIdに SqlDatasourceを指定し、
SqlDatasourceのSelectQueryに" Select * from Table1 "
なんて指定しておけば、いくらポストバックが発生しても
常にDropDownList.DatasourceがNullでない状態で
、なおかつSQLサーバーをプロファイルしていても
Select...続きを読む

Aベストアンサー

いくつかの条件がからんでいますが、一般的にということで。。

ポストバック時、BindControlのDataSourceプロパティはnullになっていますが、通常、ViewStateをonにしていれば、BindControl自身の値(RepeaterであればItemTemplate生成のテキストボックスなど)がViewStateにドカンと保持されて、自動的に再表示されますので、再度DataBindする必要はないと思います。

自分は、ASP.NET 2.0 Web Formであれば、
初回時:データソースから読込み、DataBind実行
ポストバック時:追加・削除・更新の場合のみ、DB操作を行ってから読込み、DataBind実行
といった感じで統一しています。

ただ、毎回DBから読み込む方式と、ViewStateに値を埋めておいて送信する方法の比較ですが、DBドライバ側のキャッシュ機能などを考えれば、デカいViewStateより再SELECTのほうが早いような感じがします。

また、新しいASP.NET MVCではもはやViewStateもPostBackも使っていません(やっぱり)。
SQL DataSourceもObject DataSourceもキレイサッパリなくなって、「LINQかEntity Frameworkを使え」ということのようです。

いくつかの条件がからんでいますが、一般的にということで。。

ポストバック時、BindControlのDataSourceプロパティはnullになっていますが、通常、ViewStateをonにしていれば、BindControl自身の値(RepeaterであればItemTemplate生成のテキストボックスなど)がViewStateにドカンと保持されて、自動的に再表示されますので、再度DataBindする必要はないと思います。

自分は、ASP.NET 2.0 Web Formであれば、
初回時:データソースから読込み、DataBind実行
ポストバック時:追加・削除・更新の場合のみ...続きを読む

Q登録後、呼び出し元ページに戻るには

こんにちは。
ASP.NET2.0を使っています
データベースを閲覧したり修正したりするページを作成しています。

閲覧画面AとBがあり、どちらのページからも修正画面Cに行くことができます。
画面A→画面C
画面B→画面C
ここで修正画面Cでデータを修正後、呼び出されたページに戻りたいのですが、呼び出されたページを取得する方法に困っています
修正後の画面に戻りたいので、javascriptのhistory.back()は使えませんし、Request.UrlReferrerは修正時にポストバックされるからか修正画面Cのアドレスを示してしまっています。

なにか方法はないものでしょうか?よろしくお願いします。

Aベストアンサー

ページの遷移をどのように行っていますか?

ボタンのクリックイベントで Server.Transferで遷移しているならPreviousPageで取得できます

画面Cのメンバーに
dim myPreVious as Page
を追加

画面Cの Page_Lodeイベントで
if IsPostback = FALSE then
  if PreviousPage isnot nothing then
    Session("Previous") = PreviousPage
  end if
Else
  myPrevious = Seccion("Previous")
End if

画面Cの呼び出し元へ戻る場合
if myPrevious isnot Nothing then
  Session("Previous") = Nothing
  Response.Redirect( myPrevious.AppRelativeVirtualPath)
end if
といった具合いで ・・・

QASP.Net ラベルの内容をすぐに更新したい

大変お世話になっております。
昨年は大変お世話になり、多大なご教授をいただきました。
本年も何卒よろしくお願いいたします。

前々からお聞きしようと思っていたのですが、
処理によってラベルの内容がすぐに反映しないのですが
どのようにすればすぐに反映するのでしょうか?

例えば下記のような場合は、ラベルの内容を初期化したいのですが、
それがされるのは、ボタンの処理後になります。
ボタン処理の前にラベルを更新するにはどうすればいいのでしょうか?

もしかしたら 大変初歩的な質問かもしれませんが、
何卒よろしくお願いいたします。

Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles RecDateButton.Click

  Me.Label1.Text = ""

  ここからボタンの処理が開始します

End Sub

Aベストアンサー

クライアント側で、ボタンがクリックされた瞬間に行う。
具体的には、クライアント側でボタンのonclickイベントで行う。

<input type="submit" onclick="document.getElementById('Label1').innerText = ''">

サーバーコントロールにクライアントイベント記述用のOnClientClickプロパティがあるので、そこに書く。
ポストバック時では遅いので、一回目のリクエストのときにonclickイベント付のボタンをブラウザに返す。

protected void Page_Load(object sender, EventArgs e)
{
Button1.OnClientClick = "document.getElementById('" + Label1.ClientID + "').innerText = ''";
}

サーバー側イベントとクライアント側イベントは別物だといことを理解するべし。

ユーザーがボタンをクリック
→ボタンのクライアントイベント(onclick)
→formのsubmit
→ブラウザがPOST
→ASP.NETがポストバックを受け取る
→Page_Loadやらいろいろ
→ボタンのサーバーイベント(Click)
→Renderやらいろいろ
→ブラウザにHTMLを返す
→ブラウザ側の表示

クライアント側で、ボタンがクリックされた瞬間に行う。
具体的には、クライアント側でボタンのonclickイベントで行う。

<input type="submit" onclick="document.getElementById('Label1').innerText = ''">

サーバーコントロールにクライアントイベント記述用のOnClientClickプロパティがあるので、そこに書く。
ポストバック時では遅いので、一回目のリクエストのときにonclickイベント付のボタンをブラウザに返す。

protected void Page_Load(object sender, EventArgs e)
{
Button1.OnClientClick = "docu...続きを読む

Q日付型のフィールドに空白を入れる方法を教えてください

ASP(VBScript)でSQLサーバにINSET INTO文を使ってデータを格納しているのですが、日付の部分がNULLの時、「1900/1/1」が入ってしまいます。
そのまま、空白を入れる方法はどうやったらよろしいのでしょうか?

TABLE1の内容は
番号|内容|日付です。

INSERT INTO TABLE1 VALUES ( 1, 'あいう', '')

結果
1|あいう|1900/1/1

Aベストアンサー

あとは、プログラムの書き方次第ですね、、、


If hensu=Null Or hensu="" Then
dt = "NULL"
Else
dt = "'" & hensu & "'"
End IF

E_SQL = "INSERT INTO TABLE1 VALUES & _
"( 1,'あいう', " & dt& ")"
の様に書きます。

Qonload時にPostBackを発生させる方法

ASP.net初心者です。
function Test()
{
document.forms[0].method = "post";
document.forms[0].action = "test.aspx";
document.forms[0].submit();
}

ボディタグ部
<body onload="Test();">

ソースコードは上記のようになっており、
onload時にJavaScriptで意図的に
PostBackを発生させようとしたのですが、
"Testはtest.aspxのメンバではありません"
とコンパイルエラーがでてしまいます。
どのようにすればonload時にPastBackを発生させる
ことが出来るのでしょうか?

ご回答いただければ幸いです。

Aベストアンサー

お世話になります。


> onload時にJavaScriptで意図的に
> PostBackを発生させようとした
onload で PostBack が発生したら、
ずっとレスポンスが返されないのではないですか?
何故にそのような事がされたいのでしょうか?


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング