2

オンデマンドで 2 つのユーザー コントロールをロードしたい。

 asp:UpdatePanel ID="UpdatePanel1" runat="server"
    ContentTemplate
        asp:Button ID="Button1" runat="server" Text="Button" UseSubmitBehavior="false"
         OnClick="Button1_Click" /
        div id='Div_UserControlPlace' enableviewstate="true" runat="server" 
        /div
    /ContentTemplate
    Triggers
        asp:PostBackTrigger ControlID="Button1" /
    /Triggers
/asp:UpdatePanel
asp:UpdatePanel ID="UpdatePanel2" runat="server"
    ContentTemplate
        asp:Button ID="Button2" runat="server" Text="Button" UseSubmitBehavior="false" 
        OnClick="Button2_Click" /
        div id='Div_UserControlPlace2' enableviewstate="true" runat="server" 
        /div
    /ContentTemplate

aspx.cs

protected void Page_Load(object sender, EventArgs e)
{

}
protected void Button1_Click(object sender, EventArgs e)
{
    Control FeaturedProductUserControl = new Control();
    FeaturedProductUserControl = LoadControl("WebUserControl1.ascx");
    FeaturedProductUserControl.EnableViewState = true;
    Div_UserControlPlace.Controls.Add(FeaturedProductUserControl);
}

protected void Button2_Click(object sender, EventArgs e)
{
    Control FeaturedProductUserControl2 = new Control();
    FeaturedProductUserControl2 = LoadControl("WebUserControl2.ascx");
    FeaturedProductUserControl2.EnableViewState = true;
    Div_UserControlPlace2.Controls.Add(FeaturedProductUserControl2);

}

最初のボタンをクリックして最初のユーザー コントロールを読み込みます - これは正常に動作しますが、別のボタンをクリックして 2 番目の UserControl を読み込むと、最初の UserControl が消えて 2 番目の UserControl が読み込まれます。

ありがとう IFA_User

4

4 に答える 4

3

コントロールをフォームに動的に追加するには、 Placeholder コントロールを使用する必要があります。

于 2012-07-07T07:03:44.710 に答える
0

それを行うにはいくつかの方法があります:

  1. U は、Ajax を使用して UserControls をロードできます。Ajax を使用する利点は、ページがポストバックされないことです。たとえば、Button1 のクリック イベントで ajax(traditional/Jquery) を呼び出して UserControl1 をロードし、Button2 User control2 のボタン クリックで。

  2. 2 つのボタンを 2 つの異なる更新されたパネルに配置します。これにより、クリック イベントはページの一部のみを更新します。

  3. どのボタンがクリックされたか (ViewState/Session) をどこかに保存する必要があり、任意のボタンをクリックすると、その変数の値がチェックされ、明示的にコントロールがロードされます。

注意点 - ページが完全にポストバックされたときにデータを取得したい場合は、ページの読み込みイベント サイクルを念頭に置いてコントロールを追加する必要があります。

于 2012-07-07T08:32:11.863 に答える
0

ユーザー コントロールが HTML で作成されると、asp.net はユーザーの操作なしでポストバック間で保持されます。ただし、それらをプログラムによって (動的に) ロードしている場合、それらはポストバック間で保持されません。したがって、それらをプログラムでロードする場合は、それらをプログラムで永続化するというタスクも追加されます。ViewState(またはSessionおそらく) を使用して、ロードされたものと、ポストバックの間にロードする必要があるその他の必要な情報を保存します。ポストバックごとに、すべてのコントロールをリロードする必要があります。そうしないと、コントロールが消えてしまいます。

于 2012-07-07T07:06:22.103 に答える