いくつかのユーザー コントロールが開発され、顧客が注文を作成しているページに配置された 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; }
}