0

ユーザーコントロールに追加したラベルとテキストボックスがあります。

<%@ 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ページの1つにリンクボタンがあり、クリックするとこのユーザーコントロールにデータが入力されます。

<asp:LinkButton ID="lnkAddLoc_AGBI2_G0138" runat="server" Text="+ Add Another Location" onclick="lnkAddLoc_AGBI2_G0138_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ページで呼び出しているときに初めてユーザーコントロールが設定されますが、2回目にリンクボタンをクリックすると、ユーザーコントロールが2回目に設定されません。コーディングは初めてです、助けてください:(

4

2 に答える 2

0

私が思う問題は、コントロールがViewStateに読み込まれるため、ポストバック全体でコントロールが失われることです。

コントロールをセッションにロードできるサンプルを次に示します。これはあまり良い方法ではありませんが、目的には適しています。

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

UserControl マークアップ

<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>
于 2013-01-08T02:51:11.033 に答える
-2

コントロールをセッションに保存する必要はありません。問題の解決策は次のとおりです。

ASPX コード :

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

コードビハインド:

protected void lnkAddLoc_AGBI2_G0138_Click(object sender, EventArgs e)
    {
        Control uc = (Control)Page.LoadControl("~/AddMultiLoc.ascx");
        Panel1.Controls.Add(uc);
    }

リンク ボタン lnkAddLoc_AGBI2_G0138 をクリックするたびに、ユーザー コントロールの新しいインスタンスが Panel1 に追加されます。

于 2013-01-08T05:41:18.783 に答える