动态地添加用户控件ON按钮点击页面whic也是用户控件(ModalPopExtender用户控件) [英] Dynamically add user control in page ON button click whic is also in user control (ModalPopExtender in user control)

查看:180
本文介绍了动态地添加用户控件ON按钮点击页面whic也是用户控件(ModalPopExtender用户控件)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有我想要动态地创建每次用户点击按钮(按钮也是在DB保存数据。)这只是一种讨论论坛,用户的回复,看来消息下方的一个简单的用户控制。

在上回复按钮,用户点击一个ModalPopupExtender窗口弹出,并输入用户答复并提交。

当我点击在得到保存在数据库弹出提交数据,但ButtonClick之前的OnInit执行,如何创建新的控制,并在此方案中加入控制。

控制code ASPX

 < D​​IV的风格=边界:.25em固体#000;保证金:10px的;填充:10px的>
    < D​​IV>
        < ASP:标签ID =lblMessage=服务器WIDTH =200像素>< / ASP:标签>
    < / DIV>
    < D​​IV>
        < ASP:按钮的ID =btnReply=服务器文本=回复/>
    < / DIV>
< / DIV>
<表>
    &所述; TR>
        &所述; TD>
            < ASP:ModalPopupExtender ID =mpeReply=服务器的TargetControlID =btnReplyPopupControlID =pnlReply
                BackgroundCssClass =ModalPopupBG1>
            < / ASP:ModalPopupExtender>
            < ASP:面板ID =pnlReply=服务器>
                < D​​IV CLASS =popupbody>
                    <表格的宽度=90%>
                        &所述; TR>
                            &所述; TD>
                                < ASP:文本框ID =txtReply=服务器WIDTH =400像素的CssClass =输入1的TextMode =多行
                                    的ValidationGroup =ReplyPopup>< / ASP:文本框>
                            < / TD>
                        < / TR>
                        &所述; TR>
                            &所述; TD列跨度=2>
                                < ASP:按钮的ID =btnSubmit按钮=服务器文本=提交的ValidationGroup =ReplyPopup
                                    的OnClick =btnSubmit_Click/>
                                < ASP:按钮的ID =btnClose=服务器文本=取消的CausesValidation =FALSE/>
                            < / TD>
                        < / TR>
                    < /表>
                < / DIV>
            < / ASP:面板>
        < / TD>
    < / TR>
< /表>

用户控制的.cs(按一下按钮只保存消息为DB)

 保护无效btnSubmit_Click(对象发件人,EventArgs的发送)
{
    message.Save();
}

页的.cs

 保护无效Page_Init(对象发件人,EventArgs的发送)
{
    LoadControl();
}保护无效的Page_Load(对象发件人,EventArgs的发送)
{
}私人无效LoadControl()
{
    divMessageControl.Controls.Clear();    MessageCollection封邮件= MessageCollection.LoadAll();
    的foreach(在封邮件信息MSG)
    {
        AddControlInPlaceHolder(MSG);
    }
}私人无效AddControlInPlaceHolder(消息MSG)
{
    控制=的MyUserControl(控制)Page.LoadControl(〜/控制/ MessageControl.ascx);    标签lblMessage = myUserControl.FindControl(lblMessage)作为标签;
    如果(lblMessage!= NULL)
    {
        lblMessage.Text = msg.MsgTxt;
    }    divMessageControl.Controls.Add(的MyUserControl);
}


解决方案

当你动态添加控件工作,你需要重新创建Page_Init处理程序中的所有previously添加的控件。但对于新的控制它的确定它添加只是回传控制事件处理程序。尝试致电 AddControlInPlaceHolder 法权 btnSubmit按钮单击处理程序。如果你需要有INT该方法的数据库信息的ID,考虑保存方法与新值更新消息ID。

I have a simple user control which I want to create dynamically every time user click button (button also saves data in db.) This is just a kind of Discussion forum where user reply and it appears beneath message.

When user click on Reply button a ModalPopupExtender window pops up and user enter its reply and submit.

When I click on submit in popup data get saved in db but OnInit execute before ButtonClick, how to create new control and add in controls in this scenario.

Control Code 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>

User control .cs (button click just save message into db)

protected void btnSubmit_Click(object sender, EventArgs e)
{
    message.Save();
}

Page .cs

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);
}

解决方案

When you working with dynamically added controls you need to re-create in Page_Init handler all previously added controls. But for new control it's ok to add it just in postback control event handler. Try to call AddControlInPlaceHolder method right in btnSubmit click handler. If you need to have database message's id int that method, consider to update message id in Save method with new value.

这篇关于动态地添加用户控件ON按钮点击页面whic也是用户控件(ModalPopExtender用户控件)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆