- PR -

非同期通信で取得した内容を、画面に表示する方法

投稿者投稿内容
未記入
常連さん
会議室デビュー日: 2009/03/11
投稿数: 28
投稿日時: 2009-03-11 12:21
はじめて利用させて頂きます

ASP.NET3.5で開発しています

画面側のドロップダウンリストをupdatepanelタグで囲んで非同期通信をしています
そのドロップダウンリストの内容を変える度にチェンジイベントを走らせ
〜aspx.vbの処理でDBから取ってきた値を、金額欄にセットして画面に表示させることを
考えています

画面構成は、master.pageを使っています

その関係で、金額欄をupdatepanelタグで囲むことは出来ません

実装の方法としては、

〜aspx.vbの処理で取得した金額を、javascriptの変数で受けて
その変数を金額欄にセットするという作りにしようと考えています

実コードの書き方が全く分からず、困惑しています

よろしくご教授ください

お願いいたします
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2009-03-11 14:25
金額欄がマスターページ側にあるからupdatepanelで囲めないってことでしょうか。

この機能を使えばできそうです。
http://www.atmarkit.co.jp/fdotnet/ajaxlib/ajaxlib02/ajaxlib02_04.html

値の受け渡しは、この方法を使ってもいいですが、私だったらhidden経由かなにかで
やっちゃいます(ドロップダウンリストのvalueでもいい)
http://www.atmarkit.co.jp/fdotnet/ajaxlib/ajaxlib02/ajaxlib02_05.html
未記入
常連さん
会議室デビュー日: 2009/03/11
投稿数: 28
投稿日時: 2009-03-11 20:18
べる様
お世話かけます

mastepage.masterの中

function pageLoad() {

var mng = Sys.WebForms.PageRequestManager.getInstance();

// 非同期ポストバックの完了時に呼び出される
// イベント・ハンドラを定義
mng.add_endRequest(
function(sender, args) {
var aaa,bbb,ccc

//合計金額の取得
aaa = document.getElementsById("hdnaaa").Value;
bbb = document.getElementById("hdnPbbb").Value;
ccc = document.getElementById("hdnccc").Value;


〜aspxの中
<!-- 追加 -->
<input type="hidden" runat="server" id="hdnaaa" value="" />
<input type="hidden" runat="server" id="hdnbbb" value="" />
<input type="hidden" runat="server" id="hdnccc" value="" />

〜aspx.vbの中

'hidden項目設定
Me.hdnaaa.Value = Server.aaa '金額1
Me.hdnbbb.Value = Server.bbb '金額2
Me.hdnccc.Value = Server.ccc '金額3

この書き方だと、javascriptで値を取る事が出来ません

非同期通信が関係しているのでしょうか

よろしくお願いします


べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2009-03-12 01:24
どうせマスターページを編集するならやはりマスターページ側でUpdatePanel使ったらいいんじゃないですか?
aspx側からマスターページへはこの方法でアクセスできます。
http://www.atmarkit.co.jp/fdotnet/dotnettips/469aspmasterpage2/aspmasterpage2.html

endRequestを使うのであれば、、

引用:
aaa = document.getElementsById("hdnaaa").Value;
bbb = document.getElementById("hdnPbbb").Value;
ccc = document.getElementById("hdnccc").Value;

HTML出力ソースを見てみてください。クライアント側でのidは変わっているはずです。
これらをaspx側に書いて
getElementById('<%= hdnccc.ClientID %>')
などとすれば取れるでしょう。で、
function pageLoad() { の中に入れる必要は無いと思います。これは初回も非同期完了時も呼ばれますから。
未記入
常連さん
会議室デビュー日: 2009/03/11
投稿数: 28
投稿日時: 2009-03-12 03:11
べる様

たびたびお世話かけます

HTMLソースを確認し、追加されたコードを追加しましたが
だめでした
というより、マスターページを使っている関係で、頭にコンテンツ名がついてしまい
同じにすることが出来ません

よろしくお願いします

べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2009-03-12 03:47
はい、そうですよね。
ですからマスターページでなくaspx側に<%= hdnccc.ClientID %>のように書いて、
自動生成されるIDをjavascript側で参照できるようにするか、
aspx側からマスターページのコントロールを取得できるようにしておいて
非同期ポストバックのときにVB側で操作するか、の2とおりの提案をしました。
未記入
常連さん
会議室デビュー日: 2009/03/11
投稿数: 28
投稿日時: 2009-03-12 04:30
ベル様

たびたびお世話をおかけしております

すっかり、はまってしまいました

aspx側にhidden項目を
<input type="hidden" runat="server" id="hdnaaa" value="" />
と書いて
javascriptを
hogehoge = document.getElementById('<%= hdnaaa.cliant %>')
のように自動生成されるIDを書くと
怒られてしまいます

何か根本的に間違っているのでしょうか

よろしくお願いします

Access
ぬし
会議室デビュー日: 2002/04/08
投稿数: 829
投稿日時: 2009-03-12 07:04
UpdatePanelを使わないで
Ajax経由でWebサービスを呼び出したらどうですか?

Webサービス経由で取得した情報をDropDownListに表示するとか。

PageMethodを使えば簡単に実装できると思うのですが・・・

_________________
ASP.NET+Ajaxサンプル集 | JavaScript+Ajaxサンプル集

[ メッセージ編集済み 編集者: Access 編集日時 2009-03-12 07:05 ]

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