QA@IT

ユーザーコントロールの値を取得するには?

5109 PV

win7にてvs2008でasp.net(C#)の開発を行っております。

メインページにユーザーコントロール(A)を置き
そのユーザーコントロール(A)内にユーザーコントロール(B)を配置して
ページ作成をしています。

ユーザーコントロール(B)にはasp:GridViewを配置し、
ボタンクリックで行を追加したり削除したりします。
(ボタンクリックと行の追加等はJavaScriptを使用)

更にユーザーコントロール(A)には別のユーザーコントロール(C)
があり、そこにボタンが設置してあります。

このユーザーコントロール(C)内のボタンクリックイベントで
ポストバックを発生させ、ユーザーコントロール(B)内のグリッドの値を
取得したいのですが、良い方法はありますでしょうか?

現状の問題
ポストバックでユーザーコントロールが消える為、ページロードで生成しているが
中の値が全て消えてしまう。

よろしくお願いします。

以下追求[2012/11/29 10:45]
ユーザーコントロールは動的に生成しています。
InitやLoad等で作らないのはそのタイミングだと画面に配置しているコントロールの値を取得出来ない為
配置するユーザーコントロールが分からないからです。

  • 一番外枠になっているユーザーコントロール(A)のみを動的に変更する様にし、ユーザーコントロール(B)等は全て画面側で全パターンのユーザーコントロールをせっちする事により消えなくなりました。
    しかし、JavaScriptで設定した値が取得できません。
    JavaScriptで追加した値はViewStateに反映されないので取得出来ないのでしょうか?
    -

回答

自己解決致しました。

GridViewをJavaScriptでは触れないのでテーブルを変更し、
ボタンのポストバックで変更されたテーブルの値をサーバーに戻す様にしました。

ありがとうございました。

編集 履歴 (0)

ポストバックでユーザーコントロールが消える、ということ自体がおかしい気がします。
単純なユーザーコントロールで動作を確認してみたほうがよいかと。

あと、ページロードで毎回生成していたら、その時点で中の値は初期化されて当然かと。

編集 履歴 (0)
  • ユーザーコントロールは動的に配置している為
    毎回生成しないと消えてしまうのですが、
    普通はページロード等で毎回生成するのではないのでしょうか?

    動的な配置でなければ値は消えませんでした。
    -
  • まず、動的配置であることを最初の質問に書きましょう。
    あと、ユーザーコントロールでなくても動的配置のときは注意すべき点があります。それを調べれば解決に至れるような気がします。
    -
  • すみません。
    『ページロードで消える』『ページロードで生成』と書いて、動的に作っていると伝えてるつもりでいました。
    テキストボックスやリストボックスを単純に画面で生成した場合は、PreInitで生成してメンバ変数に保存できたり、
    Initで生成してViewStateから取り込んだり、Grid等はデータ取得時にセッションに値を保持してページロードで値をもどしたりして希望の動作はしています。
    -
ウォッチ

この質問への回答やコメントをメールでお知らせします。