사용자가 버튼을 클릭 할 때마다 동적으로 만들려는 간단한 사용자 컨트롤이 있습니다 (버튼은 또한 데이터를 db에 저장합니다). 이것은 토론 포럼의 일종으로 사용자가 답장하고 메시지 아래에 표시됩니다.동적으로 페이지에 사용자 정의 컨트롤을 추가합니다. 사용자 컨트롤 (사용자 컨트롤의 ModalPopExtender)에있는 버튼을 클릭하십시오.
사용자가 [답장] 버튼을 클릭하면 ModalPopupExtender 창이 나타나고 사용자가 답장을 입력하고 제출합니다.
팝업에서 submit을 클릭하면 db에 저장되지만 OnInit은 ButtonClick 전에 실행됩니다. 새 컨트롤을 만들고이 시나리오에서 컨트롤을 추가하는 방법입니다.
제어 코드 ASPX
<div style="border: .25em solid #000; margin: 10px; padding: 10px">
<div>
<asp:Label ID="lblMessage" runat="server" Width="200px"></asp:Label>
</div>
<div>
<asp:Button ID="btnReply" runat="server" Text="Reply" />
</div>
</div>
<table>
<tr>
<td>
<asp:ModalPopupExtender ID="mpeReply" runat="server" TargetControlID="btnReply" PopupControlID="pnlReply"
BackgroundCssClass="ModalPopupBG1">
</asp:ModalPopupExtender>
<asp:Panel ID="pnlReply" runat="server">
<div class="popupbody">
<table width="90%">
<tr>
<td>
<asp:TextBox ID="txtReply" runat="server" Width="400px" CssClass="input1" TextMode="MultiLine"
ValidationGroup="ReplyPopup"></asp:TextBox>
</td>
</tr>
<tr>
<td colspan="2">
<asp:Button ID="btnSubmit" runat="server" Text="Submit" ValidationGroup="ReplyPopup"
OnClick="btnSubmit_Click" />
<asp:Button ID="btnClose" runat="server" Text="Cancel" CausesValidation="false" />
</td>
</tr>
</table>
</div>
</asp:Panel>
</td>
</tr>
</table>
사용자 제어 .cs
protected void btnSubmit_Click(object sender, EventArgs e)
{
message.Save();
}
페이지 .cs
을 (버튼 클릭은 DB에 메시지를 저장)protected void Page_Init(object sender, EventArgs e)
{
LoadControl();
}
protected void Page_Load(object sender, EventArgs e)
{
}
private void LoadControl()
{
divMessageControl.Controls.Clear();
MessageCollection msgs = MessageCollection.LoadAll();
foreach (Message msg in msgs)
{
AddControlInPlaceHolder(msg);
}
}
private void AddControlInPlaceHolder(Message msg)
{
Control myUserControl = (Control)Page.LoadControl("~/Controls/MessageControl.ascx");
Label lblMessage = myUserControl.FindControl("lblMessage") as Label;
if (lblMessage != null)
{
lblMessage.Text = msg.MsgTxt;
}
divMessageControl.Controls.Add(myUserControl);
}