我有一个ModalPopupExtender,它允许客户应用付款信息。它一直工作得很好。然后客户要求查看ModalPopup上的总到期金额。这看起来并不是什么大不了的事,只是从父控件中提取总的到期日并将其传递给ModalPopup控件。似乎没有简单的办法。
这是我的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>

下面是暗号
protected void btnDummy_Click(object sender, EventArgs e) { }

protected void lnkMakePayment_Click(object sender, EventArgs e)
{
    mdlPopupPayment.Show();
}

因此,当用户点击make payment链接时,ModalPopup工作正常。它甚至触发父控件侦听的事件,以应用付款信息和用户在弹出窗口中填写的所有关联付款详细信息。再说一遍,这一切都很好。
由于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页面,它是一个数据输入屏幕,包含ModalPopupExtender和激活它的所有html代码。

最佳答案

不需要创建用户控件就可以将数据传递到模式弹出窗口中。我只会创建一个用户控件,如果我需要在不同的位置重用它。如果不需要在多个位置重用它,则不需要用户控件。相反,请执行以下操作:
假设您需要一个弹出窗口,其中显示一个字符串,并有OK和Cancel按钮,但是您需要在它弹出之前设置字符串值。
创建面板。
从步骤1开始,在面板内放置一个UpdatePanel。
在更新面板中放置按钮和ModalPopupExtender。
在弹出式扩展器下面的UpdatePanel中放置一个标签,即Ok和Cancel按钮。如下所示:

<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" />

现在,在页面的代码隐藏中,放置MyButton的处理程序:
protected void MyButton_OnClick(object sender, EventArgs e)
{
     Label1.Text = MyTextBox.Text;
     UpdatePanel1.Update();
     ModalPopupExtender1.Show();
}

09-25 17:48