- PR -

別ページのGridViewへのBindに関して

投稿者投稿内容
ぼのぼの
ぬし
会議室デビュー日: 2004/09/16
投稿数: 544
投稿日時: 2007-03-15 21:51
引用:

べるさんの書き込み (2007-03-15 13:31) より:
引用:
これに関連して1つお聞きしたいのですが、クライアントが走っている状態を
ブレークポイントみたいなもので止めて見ることはやっぱり不可能でしょうか。

少なくともC#などと同じように、は不可能です。ブラウザ上で動くデバッガみたいのが
あればできるんでしょうけど。


VS2005で可能ですよん。
デバッグ実行中にメニューのデバッグ−ウィンドウ−スクリプトエクスプローラからaspxを開くと、
レンダリングされたHTMLとして表示することができて、ここにはブレークポイントを作れます。

引用:

べるさんの書き込み (2007-03-01 15:12) より:
実現方法としては、大きく分けて、
・左フレームのドロップダウンのonchange(かな?、クライアントのイベントですよ)の
タイミングで右フレームをsubmitさせる(おおよそTHREE-ONEさんの方法)
・左フレームのポストバック先を右フレーム用のページにし、かつtargetを右フレームにする


セキュリティ的な要件もあるでしょうから、仕様的にOKかはおいといて、
一応技術的には可能ってことで実現方法を2つ追加。

・左フレームのドロップダウンのonchangeで
parent.right.location.href="右ページ.aspx?leftSelectedValue=10";
みたく書く。

・左フレームにrunat="server"のついてないformを追加し、hiddenを設置する。
<例>
<form id="form1" runat="server">

</form>
<form name="RightForm" method="post" action="右ページ" target="right">
<input type="hidden" name="leftSelectedValue" />
</form>
</例>
Tableのドロップダウンリストのonchangeで選択値をhiddenにコピーし、RightFormをsubmitする。

いずれの方法も左フレームのメインフォームのtargetを変えずに済むので、
問題を単純化できるんではないでしょうか。
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2007-03-16 01:08
引用:
onchangeではなく2つのボタンを左ページに用意し、そこにonclickでtargetを左と
右にするものを用意してみました。

このボタンは<asp:Button ではない奴ですよね?じゃないとサーバにアクセスしちゃいますね。
(アクセスしなkれば<asp:Button でもいいんですが)

引用:
まず、target="right"ボタン押し後のGridView表示は問題なく終えました。

私が勘違いしてる気がしてきましたので聞きますが、この箇所どうやってます?
PostBackUrlを右ページに設定しておいて、クライアントのonClickのタイミングで
target='right'ですよね?

後で気づきましたが、PostBackUrlを指定すると、submit時にFormのactionを変えるjavascriptが
走りますが、このactionを元に戻さないといけませんね。

引用:
その後、target="left"ボタン押し後にDBのドロップダウンを変更しましたが、
やはりTableのドロップダウンリストは更新できませんでした。
そしてこのようにしていてもGridView表示後のSelectIndexChangedイベントで
右ページのPage_Loadが走ってしまいます。。。

「SelectIndexChangedイベントで右ページのPage_Loadが」ってどういう意味ですか?
ドロップダウンは左ページにしかないんですよね?だったら右ページにはSelectIndexChanged
イベントはないはずなんですが。SelectIndexChangedってサーバ側イベントの話であってますよね?

引用:
VS2005で可能ですよん。
デバッグ実行中にメニューのデバッグ−ウィンドウ−スクリプトエクスプローラからaspxを開くと、
レンダリングされたHTMLとして表示することができて、ここにはブレークポイントを作れます。

初めて知りました。。勉強になります。ブラウザ側の設定も必要なんですね。

引用:
セキュリティ的な要件もあるでしょうから、仕様的にOKかはおいといて、
一応技術的には可能ってことで実現方法を2つ追加。

これらの方法だとtarget問題に悩まされませんね。選択値を取得するjavascriptを書いていく感じですね。

[追記]
こんな記事があったんですね。気づいてませんでした。。

[ メッセージ編集済み 編集者: べる 編集日時 2007-03-16 12:00 ]
NotFound
会議室デビュー日: 2005/07/13
投稿数: 18
投稿日時: 2007-03-16 14:16
ぼのぼの様、べる様
ご指導ありがとうございます。

ぼのぼの様

引用:

VS2005で可能ですよん。
デバッグ実行中にメニューのデバッグ−ウィンドウ−スクリプトエクスプローラからaspxを開くと、
レンダリングされたHTMLとして表示することができて、ここにはブレークポイントを作れます。



教えていただいた手法でブレークポイントをあてることができました。
その結果特に予想外のイベント発生はありませんでした。(笑)

引用:

・左フレームのドロップダウンのonchangeで
parent.right.location.href="右ページ.aspx?leftSelectedValue=10";
みたく書く。

・左フレームにrunat="server"のついてないformを追加し、hiddenを設置する。
<例>
<form id="form1" runat="server">

</form>
<form name="RightForm" method="post" action="右ページ" target="right">
<input type="hidden" name="leftSelectedValue" />
</form>
</例>
Tableのドロップダウンリストのonchangeで選択値をhiddenにコピーし、RightFormをsubmitする。



このような方法もあるんですね!同時進行で勉強させていただきます。
ありがとうございます。


べる様

引用:

このボタンは<asp:Button ではない奴ですよね?じゃないとサーバにアクセスしちゃいますね。
(アクセスしなkれば<asp:Button でもいいんですが)



はい。クライアント側のボタンです。onclickでtargetを変更しているのみです。
チェックもかねて現在左ページに3つのボタンがあります。
(targetを右に変えるボタン、同じく左に変えるボタン、表示スタート用ボタン)

引用:

私が勘違いしてる気がしてきましたので聞きますが、この箇所どうやってます?
PostBackUrlを右ページに設定しておいて、クライアントのonClickのタイミングで
target='right'ですよね?



現状では分かりやすいようにまずボタン押しでtarget="right"とし、
その後表示用ボタンでautopostbackを右ページにしております。

引用:

後で気づきましたが、PostBackUrlを指定すると、submit時にFormのactionを変えるjavascriptが
走りますが、このactionを元に戻さないといけませんね。



デバッグを行ってみたのですが、やはりtargetが特におかしいということも
ありませんでした。上記のご指摘いただいたところが怪しいのでしょうか。
理解不十分ですので調べなおしてみます!

引用:

SelectIndexChangedイベントで右ページのPage_Loadが」ってどういう意味ですか?
ドロップダウンは左ページにしかないんですよね?だったら右ページにはSelectIndexChanged
イベントはないはずなんですが。SelectIndexChangedってサーバ側イベントの話であってますよね?



selectIndexChangedは左ページにありますDB選択用のサーバ側イベントです。
左側のサーバイベントが発生と同時に右ページのPage_Loadが発生しています。
なぜかがどうしてもわかりません。。。



べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2007-03-16 15:57
引用:
現状では分かりやすいようにまずボタン押しでtarget="right"とし、
その後表示用ボタンでautopostbackを右ページにしております。

autopostback??間違いですか?

・表示用ボタンはPostBackUrlが最初から右ページ.aspxに設定されている<asp:Button
・表示用ボタンは押下時、クライアントコードでは(自動生成コード以外は)何も行わない
(つまりsubmitだけされて、あとは右ページのc#が動く)
・データベース選択ドロップダウンはAutoPostBackがtrue
・テーブルの選択ドロップダウンはAutoPostBackがfalse(というか未設定)
・ドロップダウンは両方とも、onchangeでは(自動生成コード以外は)何もしてない。
この5点、あってますか?

引用:
selectIndexChangedは左ページにありますDB選択用のサーバ側イベントです。
左側のサーバイベントが発生と同時に右ページのPage_Loadが発生しています。
なぜかがどうしてもわかりません。。。

てことは1操作で同時に2つsubmitしてることになりますね。。変ですね。現状では、targetをleftには
してるけどactionが右のままだから、左フレームに右ページが出力されちゃうと予測していたのですが。。
NotFound
会議室デビュー日: 2005/07/13
投稿数: 18
投稿日時: 2007-03-16 16:11
べる様
ご指導いつもありがとうございます。

引用:


・表示用ボタンはPostBackUrlが最初から右ページ.aspxに設定されている<asp:Button
・表示用ボタンは押下時、クライアントコードでは(自動生成コード以外は)何も行わない
(つまりsubmitだけされて、あとは右ページのc#が動く)
・データベース選択ドロップダウンはAutoPostBackがtrue
・テーブルの選択ドロップダウンはAutoPostBackがfalse(というか未設定)
・ドロップダウンは両方とも、onchangeでは(自動生成コード以外は)何もしてない。
この5点、あってますか?




autopostbackは記述ミスです。postbackurlのつもりでした。
申し訳ありませんでした。
現状は上記の5点の通りです。
よろしくお願いいたします。
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2007-03-16 22:46
左ページ.aspx(form部のみ)
コード:
    <form id="form1" runat="server">
    <div>
        データベース<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True" 
            OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged">
            <asp:ListItem>1</asp:ListItem>
            <asp:ListItem>2</asp:ListItem>
            <asp:ListItem Value="3"></asp:ListItem>
        </asp:DropDownList><br />
        テーブル
        <asp:DropDownList ID="DropDownList2" runat="server">
        </asp:DropDownList><br />
        <input onclick="form1.target='right';" id="Button1" type="button" 
            value="target=right" /><br />
        <input onclick="form1.target='left';" id="Button2" type="button" 
                value="target=left" />
        <br />
        <asp:Button ID="Button3" runat="server" PostBackUrl="right.aspx" 
            Text="データ表示" /></div>
    </form>


左ページ.aspx.cs(SelectedIndexChangedのみ)
コード:
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
      DropDownList2.Items.Clear();
      DropDownList2.Items.Add(DropDownList1.SelectedValue + "-1");
      DropDownList2.Items.Add(DropDownList1.SelectedValue + "-2");
}


right.aspx.cs(Page_Loadのみ)
コード:
protected void Page_Load(object sender, EventArgs e)
{
    Label1.Text = Request["DropDownList2"];
}



確認サンプルとして、上記のような感じだと思います。
私のright.aspxはラベルが張ってあるだけです。

操作としては、
1、データベースドロップダウン選択(このとき左にpostback)
2、テーブルドロップダウン選択(何もおきない)
3、target=rightボタン押下
4、データ表示ボタン押下(右フレームにデータが表示される)
5、target=leftボタン押下
6、データベースドロップダウン選択
であってますよね。

このままでは、左フレームにデータ表示されてしまうと思います。
(このとき、左ページのPage_Loadは走らないと思うのですが。)

target=leftボタン押下時にactionも左ページ.aspxにしてやればOKだと思います。
NotFound
会議室デビュー日: 2005/07/13
投稿数: 18
投稿日時: 2007-03-19 10:28
べる様
いつもご指導ありがとうございます。

引用:


target=leftボタン押下時にactionも左ページ.aspxにしてやればOKだと思います。




べる様の記載を参考に余計なコードがないかチェックをしなおし、
特に問題がないことを確認後、上記の変更を加えましたところ、
考えていた動作を無事終えることができました!

度々お手数をおかけして本当に申し訳なく思うと同時に、
本当に助かりました。ありがとうございました。

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