【ASP.NET】【JS】ASP.NETでshowModalDialog()を利用したモーダルの子画面ダイアログを表示する(1)

前置き

 * ASP.NETでshowModalDialog()を利用したモーダルの子画面ダイアログを表示し、画面間で値を受け渡す。
 * その際、できる限りポストバックは避けるようにする。

サンプル1

 * 以下にあるようにwindow.showModalDialog()の第2パラメタを利用する
http://d.hatena.ne.jp/replication/20100117/1263694945

親画面・デザイン:SampleMain.aspx

<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="SampleMain.aspx.vb" Inherits="VBTestSite.SampleMain" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "">http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="">http://www.w3.org/1999/xhtml">
<head runat="server">
<script type="text/javascript" src="JScript1.js"></script>
<title></title>
<base target="_self" />
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
        <asp:Button ID="Button1" runat="server" Text="Button" />
    </div>
    </form>
</body>
</html>

親画面・コードビハインド:SampleMain.aspx.vb

Public Class SampleMain
    Inherits System.Web.UI.Page
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        ' ★ポイント1(重要)★
        ' 最後に「return false;」とすること。
        ' さもないとポストバックしてしまう
        Me.Button1.OnClientClick = _
            "showModal('" & Me.TextBox1.ClientID & _
            "'); setData('" & Me.TextBox1.ClientID & "'); return false;"
    End Sub
End Class

子画面・デザイン:SampleModal.aspx

<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="SampleModal.aspx.vb" Inherits="VBTestSite.SampleModal" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "">http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="">http://www.w3.org/1999/xhtml">
<head runat="server">
<script type="text/javascript" src="JScript1.js"></script>
<title></title>
<!--  
★ポイント2(超重要)★
「<base target="_self" />」を追記する。
詳細は、「http://d.hatena.ne.jp/fyts/20071107/asp」を参照のこと。
-->
<base target="_self" />
</head>
<body onload="init('<%= TextBox1.ClientID %>');">
    <form id="form1" runat="server">
    <div>
        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
        <asp:Button ID="Button1" runat="server" Text="Button" />
    </div>
    </form>
</body>
</html>

子画面・デザイン:SampleModal.aspx.vb

Public Class SampleModal
    Inherits System.Web.UI.Page
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Me.Button1.OnClientClick = "closeModal('" & Me.TextBox1.ClientID & "');"
    End Sub
End Class

JScript1.js

var SampleClassData = function (name) {
    this.name = name;
}

function showModal(targetID) {
    var textObj = document.getElementById(targetID);
    var textValue = textObj.value;
    if (SampleClassData != null) {
        SampleClassData.name = textValue;
    } else {
        SampleClassData = new SampleClassData(textValue);
    }

    window.dialogArguments = SampleClassData;
    window.showModalDialog(
        "SampleModal.aspx",
        window,
        "dialogWidth=400px;dialogHeight=300px");
}
function init(targetID) {
    var args = window.dialogArguments.dialogArguments;
    SampleClassData = args;

    var textObj = document.getElementById(targetID);
    textObj.value = SampleClassData.name;
}

function closeModal(targetID) {
    var textObj = document.getElementById(targetID);
    SampleClassData.name = textObj.value;
    self.close();
}

function setData(targetID) {
    var textObj = document.getElementById(targetID);

    if (SampleClassData != null && SampleClassData.name != null) {
        textObj.value = SampleClassData.name;
    }
}


関連記事

ASP.NETでshowModalDialogを使わずに、モーダル表示 ~Step1~

http://blogs.yahoo.co.jp/dk521123/28248646.html

ASP.NET AJAX Control Toolkit (ModalPopupExtender, モーダル編)

http://blogs.yahoo.co.jp/dk521123/folder/982850.html

ASP.NETでshowModalDialog()を利用したモーダルの子画面ダイアログを表示する(1)

http://blogs.yahoo.co.jp/dk521123/27710267.html

ASP.NETでshowModalDialog()を利用したモーダルの子画面ダイアログを表示する(2)

http://blogs.yahoo.co.jp/dk521123/27723613.html

モーダルの子画面ダイアログを作成する

http://blogs.yahoo.co.jp/dk521123/27419535.html

カレンダーコントロール(Calendar)

http://blogs.yahoo.co.jp/dk521123/26916160.html