これまでで一番「情けなかったとき」はいつですか?

お世話になっております。

ご存知の方いらっしゃいましたら、ご教授願えますでしょうか?

Page_Loadイベントについてお尋ねしたいと思います。

フォーム内にいくつかのテキストボックスやを設置し、
テキストボックスの内容をDBへ反映させるための
実行ボタンも設置されていて、これを押した時に
ページロードを行いたいのですが、
テキストボックスの内容が変更される度に、
Page_Loadイベントが起こってしまいます。

Page_Loadイベントでは以下のような処理が行われています。
-------------------------------------------------------------
protected void Page_Load(object sender, EventArgs e)
{

if (IsPostBack == false)
{
//テキストのReadOnlyの設定等
.........
}
}
-------------------------------------------------------------
テキストボックスが変更された時には、
必ずPage_Loadイベントが起こるのでしょうか?

また、テキストボックスを変更したときには
Page_Loadイベントを起こさない方法はあるのでしょうか?

初歩的な質問ですみません・・・。

お手数ですがご教授頂きますよう
宜しくお願いいたします。

A 回答 (4件)

TextBox に AutoPostback が指定されていませんか?


PostBack(ポストバック)が発生すると必ず Page_Load が呼ばれます。
ポストバックは ASP.NET で開発する上で必須事項なので、学習されてください。
また、質問は ASP のカテゴリに「ASP.NET C#です」と書くとよいでしょう。

参考URL:http://www.atmarkit.co.jp/fdotnet/vblab/aspnetfo …
    • good
    • 0
この回答へのお礼

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

aspx上で言語をC#と宣言する際、AutoEventWireup="true"としているため、
暗黙的にPage_Loadが起こっていたようです。

しかし、Page_Loadが起こらないと出来ない処理があるため、
初回だけPage_Loadをさせて、
以後AutoEventWireup="false"になるようにしたいのですが・・・。

質問は少し変わってしまいますが、
aspx.cs上でAutoEventWireup="false"を設定する事は出来るのでしょうか?

お礼日時:2009/10/02 15:42

Windows Formsでの開発をしたことがあるとみましたが、どうでしょうか?


普通のアプリでは、最初呼び出したときにLoadが呼ばれ、表示されている間は基本的にまた呼び出されることがないというのを理解していると見ています。
さて、ネットではどうでしょうか。
基本的にIEなどのブラウザで最初呼び出したときにLoadが呼び出されるというのはイメージできるのだと思います。
ブラウザにaspxが表示されているので、ボタンを押したりしてもまたLoadが呼び出されるというのが理解できないのだと思います。
HTTPなどでは、サーバーに各ユーザーがアクセスしてきて、今どういう状態にいるかという事を把握しません。(ステートレスといいます)
つまり、アクセスしてくるたびに初期化されます。
しかし、これをうまく処理してくれているのがASP.NETです。
ViewStateなどで、状態を把握して前の状態がどうで、今回はこうなったからこういう処理しますねという事をやってくれます。

話が長くなりましたが、では、nekoBさんのやりたい処理はどうするかというと、Loadは必ずよばれますので、その中で処理を分けます。

Page_Load()
{
//毎回する処理を書きます
....

if(IsPostback)
{
//再度呼び出したい時にやる処理を書きます
....
}
else
{
//初回だけやりたい処理を書きます
.....
}
}

こんな感じでしょうか。
    • good
    • 0

> 初回だけPage_Load


それを見分けるためにisPostbackがあるはずですが。

というか、No.2の質問内容確認しました?
    • good
    • 0
この回答へのお礼

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

edp3142様の書き込みをよく読まず、早とちりをしてしまいました。
申し訳ございませんでした。

やはりTextBox に AutoPostbackをしていたので、
現象が起こっていました。

AutoPostbackをfalseにしたところ、
無事にPage_Loadが起こらなくなりました。

皆様ご丁寧に教えて頂きありがとうございました。

お礼日時:2009/10/05 11:59

ポストバックの発生源を調べたいだけなら、__EVENTTARGETを見れば分かりますよ。


if(Request.Params("__EVENTTARGET") = TextBox1.UniqueID)
{
}

>テキストボックスが変更された時には、
>必ずPage_Loadイベントが起こるのでしょうか?
はい

>また、テキストボックスを変更したときには
>Page_Loadイベントを起こさない方法はあるのでしょうか?
一応OnLoad等で小細工をすれば、Page_Loadへ行かないことは可能です。
    • good
    • 0
この回答へのお礼

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

aspx上で言語をC#と宣言する際、AutoEventWireup="true"になっているため、
暗黙的にPage_Loadが起こっていたようです。

しかし、Page_Loadが起こらないと出来ない処理があるため、
初回だけPage_Loadをさせて、
以後AutoEventWireup="false"になるようにしたいのですが・・・。

質問は少し変わってしまいますが、
aspx.cs上でAutoEventWireup="false"を設定する事は出来るのでしょうか?

お礼日時:2009/10/02 15:41

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

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


おすすめ情報