質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.12%

asp.net ajaxtoolkit のModalPopupExtenderを動的なjavascriptで表示

受付中

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,188

bons

score 5

ページAにサーバーコントロールボタンのクリックイベントでrequest.redirectにパラメーターをセットしページ遷移をした時に、

パラメーターの値をチェックし
ページBのデータが表示されたGridviewの詳細ボタンを押して、modalpopupExtenerでポップアップウインドウを表示したい。

ページBの現在の動き
Gridviewの詳細ボタンを押した時の動き
Gridviewのrowdataboundイベントで、詳細ボタンにclientscriptを設定し、

javascriptを呼び出し、隠しhiddenボタンをクリックするように書いています。

隠しhidenボタンはmodalpopupExtenderのtargetControlになっているので、詳細ボタンを押したタイミングでmodalpopupExtenderのパネルが表示されています。

具体的なソース

'ページA
Response.Redirect("pageB.aspx?pram=1");
'ページB aspx
            <asp:GridView ID="Grid_view" runat="server" DataSourceID="main"
                OnRowCreated="Grid_view_RowCreated"
                OnRowDataBound="Grid_view_RowDataBound"
                AutoGenerateColumns="False">
                <Columns>
                    <asp:TemplateField HeaderText="選択">
                        <ItemStyle HorizontalAlign="Center" />
                        <ItemTemplate>
                            <asp:Button runat="server" ID="btnDetail" Text="詳細" CssClass="" />
                        </ItemTemplate>
                </Columns>
            </asp:GridView>

            <ajaxToolkit:ModalPopupExtender ID="ModalPopupExtender1" runat="server"
                TargetControlID="btnGo" PopupControlID="pnlBk" BackgroundCssClass="modalBackground"
                DropShadow="true" PopupDragHandleControlID="pnl" CancelControlID="btnCancel">
            </ajaxToolkit:ModalPopupExtender>

            <asp:Button ID="btnGo" runat="server" Text="" Width="0%" Height="0%" Style="display: none" />
'ページB vb.net
Protected Sub Grid_view_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles Grid_view.RowDataBound
If e.Row.RowIndex >= 0 Then
Dim btn as new button = CType(e.Row.FindControl("btnDetail"), Button)
btn.OnClientClick = "push("+e.Row.RowIndex.toString()+")"
end if
End Sub
function push(index){
//indexでポップアップの表示内容等変更。
document.getElementById('btnGo').click();
}

何かアドバイスをください、お願いします

--追記---------------

var arg = new Object;
var pair = location.search.substring(1).split('&');
for (var i = 0; pair[i]; i++) {
    var kv = pair[i].split('=');
    arg[kv[0]] = kv[1];
}
var pram = Number(arg[kv[0]]);
var target = document.getElementById('MainContent_Grid_view_btnDetail_' + pram.toString());
target.click(); 

こんな感じのjavascriptをページ遷移時に実行させたいのです。

urlにパラメーターを直接入力し、↑のスクリプトタグを書いて動かしたところ、
無効なポストバックまたはコールバック引数です。イベントの検証は、構成の <pages enableEventValidation="true"/>、またはページの <%@ Page EnableEventValidation="true" %> を使用して有効にされます。

と、出てしまい、
PageloadやPagePrerenderのイベントで、clientScriptで追加してもちゃんとした動きになってくれませんでした。

何かアドバイスのほうよろしくお願いします

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • SurferOnWww

    2017/10/31 14:40

    ASP.NET のタグをつけてください。

    キャンセル

  • SurferOnWww

    2017/10/31 14:48 編集

    で、問題は何でしょう? アドバイスをと言われても何をアドバイスすればいいのか、上の文からは分からなかったのですが。

    キャンセル

回答 1

+1

何がしたいのか、どこで躓いてるのか質問文からはっきり読み取れませんが・・・

想像をたくましくすると、以下のようなことがしたいように思えますがどうなんでしょう?

(1) ページ A からページ B にリダイレクト。その際、クエリ文字列でパラメータを渡す。

(2) ページ B には GridView が配置してあり、受け取ったパラメータの値を元にデータを取得して GridView に表示する。

(3) GridView の各データ行にはボタンが配置されており、それをクリックすると DetailsView にその行のレコードの詳細を表示し編集操作ができるようにしたい。

(4) DetailsView は ModalPopup に入れておき、(3) のボタンがクリックされるまでは非表示、ボタンクリックで表示されるようにしたい。

(5) DetailsView での作業が終わったら ModalPopup を閉じる。

・・・というようなことがしたいが、上記 (3) のところをどうすればいいか分からない。

上記の想像が合っているとすれば、以下の記事の例が参考になると思いますので見てください。

ModalPopup で編集・更新操作
http://surferonwww.info/BlogEngine/post/2010/10/14/Select-edit-and-update-using-2-pages.aspx

上記の想像が間違っているということでしたら、どこがどう間違っているか具体的に書いてください。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/10/31 16:10

    ちなみに EnableEventValidation とは何かですが、以下の記事を見てください。

    EnableEventValidation
    http://surferonwww.info/BlogEngine/post/2012/01/15/EnableEventValidation.aspx

    記事に書いてあるように普通にやっていれば出るエラーではないです。何か想像を絶する(変なこと?)ことをしているような気がしますが。

    キャンセル

  • 2017/10/31 17:54 編集

    AからBに渡すパラメーターには日付が入っています 今日だと20171031と、
    GridViewの詳細ボタンのクライアントスクリプトにはその行のデータの内容、
    例:push(20171031,1,'あいうえお');
    PopupControlID="pnlBk"の中にはtextboxとdropdownlist
    キャンセルボタンとOKボタン、

    詳細ボタンを押した時にtextboxにクライアントスクリプトのあいうえお、
    dropdownlistにselectする値 1~3、を初期値として設定しています

    oKボタンを押した時にtextboxに入力変更された内容がボタンクリックイベントによって処理され、
    データベースへの更新をしています。

    -------------------------------------
    すいませんEnableEventValidationについての記事を確認し、
    ソースの見直しをしたところ、引数を与えておらずunderfieldのままdropdownlistのselectedValueに入れようとしてました・・・。
    これによってエラーが発生したのだろうなと思いました…。
    パネルの中のドロップダウンリスト
    document('MainContent_popup_ddl').selectedvalue = underfield;←



    考え方自体はこの方法でよろしいのでしょうか

    pageloadのnot ispostback時
    QueryStringに値が入っている場合はサーバー側でjavascriptを発行して実行させる

    ちなみにdropdownlistはsqldatasourceでの内容をbindして、 AppendDataBoundItems="true"で
    <asp:ListItem Value="0">選択</asp:ListItem>を追加しています

    キャンセル

  • 2017/10/31 18:49

    すみませんが何をしたいのか全く見当がつきません。説明いただいても、失礼ながら、日本語レベルで意味が分からないです。

    私が回答に書いたように、やりたいことの全体のシナリオ・ストーリーを箇条書き / ステップバイステップで書いていただけませんか。

    全体的なやりたいことやストーリーのごく一部を切り出して質問すると、もしその質問が全体的なやりたいことを実現するのには見当違いだった場合、回答も当然やりたいことを実現するには的外れになってしまいます。そうすると、見当違いと的外れのやり取りが繰り返されるだけになって、なかなか解決にたどり着けません。時間の無駄でもありますし。

    全体のストーリーが分かると、局所的な質問の部分は実現が無理でも、「それはできないけど、やりたいことはこうすれば実現できる」というような代案も出てくるかもしれません。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.12%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる