- PR -

HTMLからxxx.aspx.vbへの処理のわたし方。

投稿者投稿内容
Qちゃん
常連さん
会議室デビュー日: 2003/06/27
投稿数: 36
投稿日時: 2004-12-15 10:23
ASP.NETでDataList内のTextBoxにフォーカス取得時の処理をxxxx.aspx.vbで記述したいのですが、どうしたらよいでしょうか?
DataList内のTextBox.Attributes("onFocus") = "処理の内容"
という記述はしているのですが、HTMLの方で処理するのではなく、イベントが発生したらHTMLの方からxxxx.aspx.vb内のプロシージャを呼び出して処理を行いたいのですが、その方法がわかりません。
どのたかご存知の方、よろしくお願いします。
burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2004-12-15 10:45
DataList内のTextBoxにフォーカスがあたったら、PostBackしたいということですよね?
Page.GetPostBackEventReferenceメソッドを使用して、
PostBackさせるクライアントサイドの関数名を取得して

TextBox.Attributes("onFocus")
で呼ばれるクライアントサイドの関数からポストバックさせる関数を呼べば可能だとおもいます。

Qちゃん
常連さん
会議室デビュー日: 2003/06/27
投稿数: 36
投稿日時: 2004-12-15 11:04
引用:

burton999さんの書き込み (2004-12-15 10:45) より:
DataList内のTextBoxにフォーカスがあたったら、PostBackしたいということですよね?
Page.GetPostBackEventReferenceメソッドを使用して、
PostBackさせるクライアントサイドの関数名を取得して

TextBox.Attributes("onFocus")
で呼ばれるクライアントサイドの関数からポストバックさせる関数を呼べば可能だとおもいます。





ありがとうございます。
しかし私にはちょっと難しく・・・
処理的にはそのような感じでできそうなきがします。
具体的にどのようにしたらいいでしょうか?
burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2004-12-15 13:21
ただPsotBackさせたいだけなら

Dim postBackFunctionName As String = Page.GetPostBackEventReference(Me)

Dim script As System.Text.StringBuilder = New System.Text.StringBuilder
script.Append("<SCRIPT language=""JavaScript"">" & vbCrLf)
script.Append("function GotFocus()" & vbCrLf)
script.Append("{" & vbCrLf)
script.Append(postBackFunctionName & ";" & vbCrLf)
script.Append("}" & vbCrLf)
script.Append("</SCRIPT>" & vbCrLf)

Me.Page.RegisterClientScriptBlock("GotFocus", script.ToString())

Me.TextBox1.Attributes("onFocus") = "GotFocus()"

これでOKです。
あとはヘルプを読んで工夫してください。
ヘルプを読んで理解する力をつけるためにも。。。。
todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2004-12-15 14:02
アイディアだけ。

DataListに隠しボタンを置いて、TextBoxのonFocusで隠しボタンをsubmitする。
これなら、どの行でイベントが発生したかが分かると思います。
あと、RegisterStartupScriptでTextBoxにフォーカスをセットする必要があるでしょう。

> DataList内のTextBox.Attributes("onFocus") = "処理の内容"
> という記述はしているのですが、HTMLの方で処理するのではなく

こちらの方が簡単かと。
菊池
会議室デビュー日: 2004/11/15
投稿数: 19
投稿日時: 2004-12-15 14:32
気になったので

 フォーカスinでポストバックを発生させるとページがリフレッシュされて
フォーカスが失われそうな気がします。
 更にポストバックからの戻ったページでフォーカス当てると再度ポストバック
してしまい無限ループ化しそうに思います。
 うまく状態管理しないと、使えないかもです。
 使えたとしてもちょっと使いづらそうに思えますが。
ぼのぼの
ぬし
会議室デビュー日: 2004/09/16
投稿数: 544
投稿日時: 2004-12-15 14:41
私もアイディアだけ。
ページのどっかにHiddenフォームを置いといて、
onfocus="Form1.Hidden1.value=this.id;Form1.submit();"
ってやっといて、aspx.vbのPage_LoadでHidden1の値を見て処理を行う。
あ、でもDataList内のTextBoxのidは自動生成だからだめか…
もうひと工夫必要ですね(^^;
ちょっとちゃんと調べてないんでここはわからないのですが、
id自動生成のとこに一定の規則性があるならこの方法も使えますかね?

今回のケースに限ったことでなく、hiddenを使いまわしてPage_Loadに処理を書く、
という方法、私はよく使ってます。つくりがシンプルになることが多いので。
burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2004-12-15 14:53
菊池様がおっしゃるように
フォーカスあたっただけでPostBackっていう設計に問題ありですね。

スキルアップ/キャリアアップ(JOB@IT)