C# 将数据传递到ModalPopupXtender

C# 将数据传递到ModalPopupXtender,c#,html,asp.net-ajax,C#,Html,Asp.net Ajax,我有一个ModalPopupXtender,允许客户应用付款信息。它一直工作得很好。然后客户要求查看ModalPopup上的总到期日。从父控件获取到期总金额并将其传递到modalpoup控件似乎不是什么大事。似乎没有简单的方法可以做到这一点 这是我的HTML代码,请记住此代码包装在UpdatePanel中 <asp:LinkButton ID="lnkMakePayment" runat="server" Visible="true" OnClick="lnkMakePayment_Cli

我有一个ModalPopupXtender,允许客户应用付款信息。它一直工作得很好。然后客户要求查看ModalPopup上的总到期日。从父控件获取到期总金额并将其传递到modalpoup控件似乎不是什么大事。似乎没有简单的方法可以做到这一点

这是我的HTML代码,请记住此代码包装在UpdatePanel中

<asp:LinkButton ID="lnkMakePayment" runat="server" Visible="true" OnClick="lnkMakePayment_Click" >

<asp:Label ID="lblMakePayment" runat="server" Text="Make Payment"/></asp:LinkButton>

<asp:Button ID="btnDummy" style="display: none;" runat="server" 
            OnClick="btnDummy_Click" />

<ajaxToolkit:ModalPopupExtender ID="mdlPopupPayment" runat="server" 
 TargetControlID="btnDummy" PopupControlID="pnlMakePayment"
 CancelControlID="popUpCancel" DropShadow="true" BackgroundCssClass="modalBackground">
</ajaxToolkit:ModalPopupExtender>

 <asp:Panel ID="pnlMakePayment" runat="server" Style="display: none;"
            SkinID="PopUpPanel" class="ContentBoxColor" Width="400px" Height="170px">
    <MP1:MakePaymentPopup ID="MakePayment"  runat="server" />
    <div style="text-align: right; width: 100%; margin-top: 5px;">
       <asp:Button ID="popUpCancel" runat="server" Text="Cancel" Width="0px" />
    </div>
 </asp:Panel>
因此,当用户单击makepayment链接时,modalpoup工作正常。它甚至触发一个事件,父控件监听该事件以应用付款信息以及用户在弹出窗口中填写的所有相关付款详细信息。这一切都很好

由于ModalPopup,我第一次尝试发送总计如下:

protected void lnkMakePayment_Click(object sender, EventArgs e)
{
    // MakePayment is the actual ModalPopup control and total due is a public property
    MakePayment.TotalDue = txtTotalDue.Text
    mdlPopupPayment.Show();
} 
问题是,当我单击链接显示ModalPopup时,PageLoad事件不会触发,因此我无法将我的属性指定给ModalPopup内的标签。 我甚至尝试使用session对象,但也遇到了同样的问题。 我甚至不能访问数据库,因为我不能传递客户ID。 有什么想法吗? 我是Javascript的新手,喜欢服务器端解决方案,但现在我愿意尝试任何东西


MakePayment用户控件包含3个asp文本框。一个用于用户输入付款金额,另一个用于付款类型,第三个用于支票号码等注释。控件上还有一个应用和取消按钮。父控件是一个基本的ascx页面,它是一个数据输入屏幕,其中包含ModalPopupXtender和激活它的所有html代码

我认为您需要提供更多的信息。您能否向我们展示或描述MakePayment用户控件中包含的标记/代码隐藏?当你谈到“父控件”时,你指的是哪个元素?MakePayment,pnlmakpayment,pnlDummy?

一旦我意识到我做错了什么,我提出的解决方案就相当直截了当了。 我必须感谢阿诺德·马图兹,因为他的博客文章给了我启示。

而不是让ModalPopup entender调用一个只显示一些html的用户控件。我制作了一个用户控件,即ModalPopupXtender。这样我可以调用它并传入一些数据

我的MakePayment用户控件的HTML如下所示

<asp:Button ID="btnDummy" style="display: none;" runat="server"  
   OnClick="btnDummy_Click" />
<ajaxToolkit:ModalPopupExtender ID="mdlPopupPayment" runat="server"  
            TargetControlID="btnDummy" PopupControlID="pnlMakePayment" 
            CancelControlID="popUpCancel" DropShadow="true"
            BackgroundCssClass="modalBackground">
</ajaxToolkit:ModalPopupExtender>
<asp:Panel ID="pnlMakePayment" runat="server" Style="display: none;"  
    SkinID="PopUpPanel" class="ContentBoxColor" Width="400px" Height="170px">
<div class="contentbox">
    <div class="contentboxHeader1">
        <asp:Label ID="lblPopupTitle" Width="350px" runat="server" Text=""></asp:Label>
    </div>
    <div class="contentbox">
        <div style="text-align: left">
            <asp:Label ID="lblTotalDue" Width="100px" runat="server" Text="">  
            </asp:Label>
            <asp:Label ID="lblTotalDueValue" Width="100px" runat="server">
            </asp:Label>
         </div>
        <div style="text-align: left">
            <asp:Label ID="lblPayment" Width="100px" runat="server" Text=""></asp:Label>
            <asp:TextBox ID="txtPayment" Width="100px" runat="server"></asp:TextBox>
            <ajaxToolkit:FilteredTextBoxExtender ID="ftbePayment" runat="server" 
               TargetControlID="txtPayment" FilterType="Custom, Numbers" 
                 ValidChars="."> </ajaxToolkit:FilteredTextBoxExtender>
        </div>
        <div style="text-align: left">
            <asp:Label ID="lblPaymentRefNo" Width="100px" runat="server" Text=""> 
            </asp:Label>
            <asp:TextBox ID="txtPaymentRefNo" Width="100px" runat="server">
            </asp:TextBox>
        </div>
        <div style="text-align: left">
        <asp:Label ID="lblPaymentType" Width="100px" runat="server" Text=""></asp:Label>
            <asp:TextBox ID="txtPaymentType" Width="250px" runat="server"></asp:TextBox>
        </div>
    </div>
    <div class="contentbox" style="text-align=right">
        <asp:Button ID="btnApplyPayment" runat="server" Text="" 
             OnClick="btnApplyPayment_Click" />
        <asp:Button ID="btnCancel" runat="server" Text="" OnClick="btnCancel_Click" />
    </div>
</div>
<div style="text-align: right; width: 100%; margin-top: 5px;">
    <asp:Button ID="popUpCancel" runat="server" Text="Cancel" Width="0px" />
</div>
</asp:Panel>
在我的主窗体上,我有一个名为makepayment的链接

<asp:LinkButton ID="lnkMakePayment" runat="server" Visible="true" 
      OnClick="lnkMakePayment_Click" >
     <asp:Label ID="lblMakePayment" runat="server" Text=""/>
</asp:LinkButton>

无需创建用户控件将数据传递到模式弹出窗口。如果我需要在不同的位置重用它,我只会创建一个用户控件。如果不需要在多个位置重用它,那么就不需要用户控件。而是这样做:

假设您需要一个弹出窗口来显示一个字符串,并具有“确定”和“取消”按钮,但您需要在它弹出之前设置字符串值

  • 创建一个面板
  • 在步骤1中的面板内放置UpdatePanel
  • 在UpdatePanel中放置一个按钮和ModalPopupXtender
  • 将标签、Ok和Cancel按钮放置在UpdatePanel内的弹出式扩展器下方。如下所示:

    <asp:Panel ID="Panel1" runat="server" CssClass="popup" Width="320px" Style="display:none">
       <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
           <ContentTemplate>
               <asp:Button ID="Button1" runat="server" Style="display:none" />
               <cc1:ModalPopupExtender ID="ModalPopupExtender1" runat="server"
                   TargetControlID="Button1"
                   PopupControlID="Panel1"
                   CancelControlID="CancelButton">
               </cc1:ModalPopupExtender>
               <asp:Label ID="Label1" runat="server" />
               <asp:Button ID="OkButton" runat="server" Text="Ok" CausesValidation="true" OnClick="OkButton_OnClick" />&nbsp;
               <asp:Button ID="CancelButton" runat="server" Text="Cancel" CausesValidation="false" />
           </ContentTemplate>
       </asp:UpdatePanel>
    </asp:Panel>
    

  • 抱歉,如果我不清楚,我在问题中添加了更多信息
    <asp:LinkButton ID="lnkMakePayment" runat="server" Visible="true" 
          OnClick="lnkMakePayment_Click" >
         <asp:Label ID="lblMakePayment" runat="server" Text=""/>
    </asp:LinkButton>
    
    protected void lnkMakePayment_Click(object sender, EventArgs e)
    {
        MakePayment.MakePayment(lblTotalValue.Text.ToString());
    } 
    
    <asp:Panel ID="Panel1" runat="server" CssClass="popup" Width="320px" Style="display:none">
       <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
           <ContentTemplate>
               <asp:Button ID="Button1" runat="server" Style="display:none" />
               <cc1:ModalPopupExtender ID="ModalPopupExtender1" runat="server"
                   TargetControlID="Button1"
                   PopupControlID="Panel1"
                   CancelControlID="CancelButton">
               </cc1:ModalPopupExtender>
               <asp:Label ID="Label1" runat="server" />
               <asp:Button ID="OkButton" runat="server" Text="Ok" CausesValidation="true" OnClick="OkButton_OnClick" />&nbsp;
               <asp:Button ID="CancelButton" runat="server" Text="Cancel" CausesValidation="false" />
           </ContentTemplate>
       </asp:UpdatePanel>
    </asp:Panel>
    
    <asp:TextBox ID="MyTextBox" runat="server" />
    <asp:Button ID="MyButton" runat="server" Text="Popup" OnClick="MyButton_OnClick" />
    
    protected void MyButton_OnClick(object sender, EventArgs e)
    {
         Label1.Text = MyTextBox.Text;
         UpdatePanel1.Update();
         ModalPopupExtender1.Show();
    }
    
    <asp:Panel runat="server" ID="pPopupQuoteSearch" CssClass="modalPopupQuote" Style="display: none">
        <asp:LinkButton ID="lbClose" Text="Close" runat="server" />
        <div id="dQuoteContainer" runat="server">
        </div>
    </asp:Panel>
    <asp:Button ID="Button5" runat="server" Style="display: none" />
    <cc1:ModalPopupExtender ID="ModalPopupExtender1" runat="server" TargetControlID="Button5"
            PopupControlID="pPopupQuoteSearch" BackgroundCssClass="modalBackground" OkControlID="lbClose">
    </cc1:ModalPopupExtender>
    
    protected void btnQuteSearch_Click(object sender, EventArgs e)
    {
        pPopupQuoteSearch.Style.Remove("display");
        pPopupQuoteSearch.Style.Add("display", "inline");
    
        dQuoteContainer.InnerHtml = "some HTML code";
    
        ModalPopupExtender1.Show();
    }