DOBON.NET DOBON.NETプログラミング掲示板過去ログ

AJax TextBoxのChangeイベントなどにフォーカス移動について

環境/言語:[XP、C#、.NET Framework2.0 + Ajax]
分類:[ASP.NET]

こんにちは。アべです。

ASP.NET2.0+Microsoft ASP.NET Ajax1.0の組み合わせで
開発しております。リストボックスやボタン、テキストボックスを
UpdatePanelに配置してコーディングしております。

その中でフォーカスの移動の実装のノリがわからずに
困っており、相談させてもらいます。

当方、TextBoxの確定で、DB検索を行い画面を更新しており、
その後のフォーカス制御が出来ずに困っています。

ソースは、
TextBoxをUpdatePanelに貼り付け、
TextBoxのプロパティAutoPostBackをtrueにしています。

イベントは下記のようにコーディングしています。

protected void _textBoxCode_TextChanged(object sender, EventArgs e)
{
_labelName.Text = "ご名答:" + _textBoxCode.Text + "です。";
_TextBoxCode2.Focus();
}


MaintainScrollPositionOnPostBackプロパティを試してみましたが、
上手くいきませんでした。

もしかして、この環境では、フォーカス移動の制御は
C#側のサーバイベントでは出来ないのでしょうか?

フォーカス移動がらみの簡単な実現方法があればアドバイスをお願い致します。

条件
・当方、JavaScriptは、jsファイルを作ったり、
各ページにコーディングはしたくないです。
(JavaScriptは、開発・デバックが手間であまり使い勝手が良くない為。)

その他
・リストボックスの選択イベントで画面を更新したときも
フォーカス制御がおかしくなります。
具体的には、↓キーによる選択で画面を更新するとそこにフォーカスが無くなる。


以上
サーバ側でやるものではありません。
あえてやるとしたら、現在のフォーカスを取ったようなたとえばTextBoxでRegistStartupScriptをjavascriptで書くことでしょう。
obj.SetFocusかなんかで、セットできたはずです。

#とりあえずWebでそんなことはやめましょう。
回答有難うございます。

なるほど、確かにサーバ側でJavaScriptを上手く埋め込めば出来ます。
ちょっとこのやり方はちょっと手間ですが、共通化を上手く行うことで
クライアントのフォーカス制御をサーバ側でシームレスに実装できそうですね。

簡単な方法がないので、簡単な方法を作って実装を簡略化してみます。

有難うございました。
フォーカスを失う問題は共通化したロジックで解決しました。

(REQUEST_LASTFOCUSや__LASTFOCUSを使ってJavaScriptの共通処理を
ScriptManagerにRegisterStartupScriptメソッドで追加し対応しました。)

しかし、サーバサイドの処理が1秒や2秒ある場合にその間に
ユーザがいろいろと触るとその内容が消えてしまうことがあり困っています。

非同期中に画面をいじらせないようなことはできるのでしょうか?

どなたかヒントでも宜しいのでアドバイスをお願いします。

非同期中にマウスを処理中にして入力コントロールを一切
触らせたくないのですが、そのやり方がわかっておりません。
http://ajax.asp.net/ajaxtoolkit/UpdatePanelAnimation/UpdatePanelAnimation.aspx

こんな感じで、触れなくするしかないと思うよ
中博俊さん、アドバイスありがとうございます。

完全に隠蔽する形でAjax中に画面を触れないように出来ました。

触れないようにする機能は、Ajaxの通信中は、「ModalPopupEntender」を
表示させ共通部分に処理を入れることが出来ました。

また、そのモーダル表示が終った後にフォーカスを元に戻す処理を
入れることもできましたし、
エラーが発生した場合は、そのエラー箇所にフォーカスを
移動することもできました。

有難うございました。

---
阿部清隆

DOBON.NET | プログラミング道 | プログラミング掲示板