加载用户的按钮单击动态控制 [英] Load user control dynamically on Button Click

查看:169
本文介绍了加载用户的按钮单击动态控制的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个标签,这是我在用户控件添加一个文本框。

I have a label and a text box which i have added in the user control.

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="AddMultiLoc.ascx.cs" Inherits="CRM_Streamline_Forms.UserControls.AddMultiLoc" %>
<table>
<tr>
    <td style="width:25%">
        <asp:Label ID="lblLocName_UC_G0138" runat="server" Text="Location Name:" />
    </td>
    <td style="width:25%">
        <asp:TextBox ID="txtLocName_UC_G0138" runat="server" Width="200px" />
    </td>
    <td style="width:25%">
        <asp:Label ID="lblLocID_UC_G0138" runat="server" Text="Location ID:" />
    </td>
    <td style="width:25%">
        <asp:TextBox ID="txtLocID_UC_G0138" runat="server" Width="200px" />
    </td>
</tr>

我有一个链接按钮在其中点击时要填充这个​​用户控制我的aspx页面之一。

I have a link button in one of my aspx pages which is when clicked should populate this user control.

<asp:LinkButton ID="lnkAddLoc_AGBI2_G0138" runat="server" Text="+ Add Another Location" onclick="lnkAddLoc_AGBI2_G0138_Click" />

code后面,我写了这个code为按钮点击:

Code behind, I have written this code for the button click:

protected void lnkAddLoc_AGBI2_G0138_Click(object sender, EventArgs e)
    {
        AddMultiLoc con = (AddMultiLoc)LoadControl("~/UserControls/AddMultiLoc.ascx");
        pnlMultiInvoiceInfo1_AGBI2_G0138.Controls.Add(con);
        Panel p = new Panel();
        Control uc = (Control)Page.LoadControl("~/UserControls/AddMultiLoc.ascx");
                    p.Controls.Add(uc);
                    p.Width = 200;
                    p.Height = 100;
                    pnlMultiInvoiceInfo1_AGBI2_G0138.Controls.Add(p);
    }

因为我称它在aspx页面第一次用户控件被填充,但是当我点击链接按钮第二次,它不填充第二次的用户控件。是新的编码,请帮助:(

First time the user control is populated as am calling it in the aspx page, but second time when i click on the link button, it is not populating the user control for the second time. Am new to coding, please help :(

推荐答案

我觉得现在的问题是,你是跨回传失去你的控件的控件到ViewState中加载。

The problem I think is that you are losing your controls across postback as the controls are loaded in to the ViewState.

下面是一个示例,你可以加载到是不是真的好做法会话的控制,但它会满足您的需要:

Here is a sample where you can load the controls in to the Session which is not really good practice but it will work for your purposes:

AddMultiLocPage.aspx

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <asp:LinkButton ID="lnkAddLoc_AGBI2_G0138" runat="server" Text="+ Add Another Location" OnClick="lnkAddLoc_AGBI2_G0138_Click" />
        </div>
        <asp:PlaceHolder runat="server" ID="Placeholder1"></asp:PlaceHolder>
    </form>
</body>
</html>

AddMultiLocPage.aspx.cs

public partial class AddMultiLocPage : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        LoadControlsFromSession();
    }

    private List<AddMultiLoc> ViewStateControls
    {
        get { return (List<AddMultiLoc>) Session["ViewStateControls"]; }
        set { Session["ViewStateControls"] = (List<AddMultiLoc>)value; }
    }

    private void LoadControlsFromSession()
    {
        if (ViewStateControls != null)
        {
            Placeholder1.Controls.Clear();

            foreach (var c in ViewStateControls)
            {
                Placeholder1.Controls.Add(c);
            }
        }
    }

    protected void lnkAddLoc_AGBI2_G0138_Click(object sender, EventArgs e)
    {
        var con = (AddMultiLoc)LoadControl("~/AddMultiLoc.ascx");
        con.ID = Guid.NewGuid().ToString();

        List<AddMultiLoc> tmpList = ViewStateControls;
        if(tmpList == null) tmpList = new List<AddMultiLoc>();
        tmpList.Add(con);
        ViewStateControls = tmpList;

        LoadControlsFromSession();
    }
}

用户控件的标记

<table>
    <tr>
        <td style="width: 25%">
            <asp:Label ID="lblLocName_UC_G0138" runat="server" Text="Location Name:" />
        </td>
        <td style="width: 25%">
            <asp:TextBox ID="txtLocName_UC_G0138" runat="server" Width="200px" />
        </td>
        <td style="width: 25%">
            <asp:Label ID="lblLocID_UC_G0138" runat="server" Text="Location ID:" />
        </td>
        <td style="width: 25%">
            <asp:TextBox ID="txtLocID_UC_G0138" runat="server" Width="200px" />
        </td>
    </tr>
</table>

这篇关于加载用户的按钮单击动态控制的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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