0

いくつかのユーザー コントロールが開発され、顧客が注文を作成しているページに配置された Web フォーム アプリがあります。ユーザーコントロールは、ポストバックなどを引き起こし、その機能がかなり広範です。

それらを別のページに入れずに、モーダルな方法で表示したいと思います(可能であれば)。そこで私の質問があります。

ユーザー コントロールを div/panel 内に配置し、それらをモーダルに表示し、ユーザーがコントロールのボタンをクリックして閉じるまで (ポストバックを介しても) モーダルに表示し続けることは可能ですか?

ユーザーコントロールがオンになっているセクションをユーザーが処理している間、フォームの残りの部分を無効にする必要があるため、基本的にモーダルオプションを検討しています。だから私は、私が推測するベストプラクティスのアプローチと、これを正しい方向に向けるいくつかのナッジを探しています。

ありがとう!

添加:

私が書いたコードでこれを更新したかったのは、それが他の誰かに役立つことを期待しており、これを実装するためのより良い方法があれば、私も耳を傾けています.

これの基本は、セッション変数を介して、ユーザー コントロールとコンテナー ページの間ですべてをやり取りしていることです。これを使用して、ユーザー コントロールが「終了」したかどうかをコンテナー ページに通知し、フラグが true に設定されるまで、コンテナー ページはポストバックごとにユーザー コントロールをモーダルに再表示し続けます。これまでのところうまくいくようです。

マークアップ:

<%@ Register Src="../controls/mylabel.ascx" TagName="mylabel" TagPrefix="uc1" %>

<div style="width: 100%;">
    <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
    <asp:Button ID="ButtonAddToCart" runat="server" Text="Add to cart" OnClick="ButtonAddToCartClick" />
</div>

<asp:UpdatePanel ID="UpdatePanel1" runat="server">
    <ContentTemplate>
        <asp:Panel ID="pnlOutput" Visible="False" runat="server" Width="500px">
            <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
        </asp:Panel>
    </ContentTemplate>
</asp:UpdatePanel>

<div style="visibility: hidden;">
    <asp:Button ID="ButtonHidden" runat="server" Text="Button" />
</div>

<asp:Panel ID="pnlDownload" Visible="False" runat="server">
    <asp:UpdatePanel ID="UpdatePanel2" runat="server">
        <ContentTemplate>
            <div style="width: 100%;">
                <uc1:mylabel ID="mylabel1" runat="server" />
            </div>
        </ContentTemplate>
    </asp:UpdatePanel>
</asp:Panel>

コードビハインド:

protected void Page_PreRender(object sender, EventArgs e)
    {
        InitializeControls();
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        InitializeControls();
    }

    private void InitializeControls()
    {
        DisplayDownloadPanel(!SessionDownloadComplete);

        if (SessionDownloadItemNumber != string.Empty)
        {
            Label1.Text = SessionDownloadItemNumber != "CANCEL" ? "Item ordered from control was: [" + SessionDownloadItemNumber + "]" : "Order was canceled.";
            pnlOutput.Visible = true;
        }
    }

    protected void ButtonAddToCartClick(object sender, EventArgs e)
    {
        bool haveWeSomeText = string.IsNullOrEmpty(TextBox1.Text) == false;
        if (haveWeSomeText == true)
        {
            SessionDownloadComplete = false;
            DisplayDownloadPanel(true);
        }
    }

    private void DisplayDownloadPanel(bool show)
    {
        pnlDownload.Visible = show;

        if (show == true)
        {
            ModalPopupExtender1.Show();
        }
        else
        {
            ModalPopupExtender1.Hide();
        }
    }

    private string SessionDownloadItemNumber
    {
        get { return Session["DownloadItemNumber"] != null ? Session["DownloadItemNumber"].ToString() : string.Empty; }
    }

    private bool SessionDownloadComplete
    {
        get { return Session["DownloadComplete"] == null || Convert.ToBoolean(Session["DownloadComplete"]); }
        set { Session["DownloadComplete"] = value; }
    }
4

2 に答える 2

1

ASP.NET Ajax Toolkit Modal ポップアップ エクステンダーをご覧ください。

于 2012-10-15T13:53:42.510 に答える
0

jQueryUIダイアログを見てください。

これは、ブラウザーでのクロスブラウザーのモーダルダイアログに適したソリューションです。

<script>
    $(function() {
        $( ".dialogClass" ).dialog({
            resizable: false,
            height:140,
            modal: true,
            buttons: {
                "Delete all items": function() {
                    $( this ).dialog( "close" );
                },
                Cancel: function() {
                    $( this ).dialog( "close" );
                }
            }
        });
    });
</script>

それをasp.netと統合する最初の問題がいくつかあります。しかし、これらはすべて、スタックオーバーフロー自体についてここで非常によく文書化されています。

于 2012-10-15T04:15:49.777 に答える