1

ユーザー コントロールを別のユーザー コントロールで拡張したいと考えています。

ユーザーコントロールAがあるとします-テキストを表示します-「コントロールA」

ユーザーコントロール B : A と表示され、「コントロール B」と表示されます。

ユーザー コントロール B を動的に読み込むと、「コントロール B」のみがページに書き込まれます。

次のコードを使用して動的にロードします。

B myControl = (B)Page.LoadControl("~/UC/B.ascx");
myPage.Controls.Add(myControl);

ユーザー コントロール B のコードは次のとおりです。

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="B.ascx.cs" Inherits="A" %> 
<div>Control B</div>

私が間違っているかもしれないアイデアはありますか?

4

2 に答える 2

1

あなたの例のような単純なコントロールの場合、構成は継承よりも優れたソリューションであることがよくあります。コントロール B にコントロール A のインスタンスを含めることを検討してください。

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="B.ascx.cs" Inherits="B" %> 
<%@ Register TagPrefix="My" TagName="ControlA" Src="A.ascx" %>
<My:ControlA runat="server" />
Control B

考えてみると、ascx コントロールで継承を使用しようとしたことは一度もありません。イベントと仮想関数は継承のコンテキストでは意味がありますが、デザイナーのコンテンツをどのようにマージする必要がありますか?

ベース コントロールに挿入ポイントを定義する場合、2 つの自然な方法があるようです。マスター ページのコンテキストでPlaceHolderメンバーのみを使用しましたが、ユーザー コントロールでそれらを使用できるかもしれません。一方、オブジェクトを Controls コレクションに動的に挿入したり、既存のコントロールの子として挿入したりすることは常に可能です。

// class A
public void AddMyControl(Control c)
{
    mydiv.Controls.Add(c); // mydiv is defined in the designer
}

// somewhere else - maybe in the page?
theControl.AddMyControl(Page.LoadControl(thePath));
于 2013-03-15T23:04:32.183 に答える
0

追加する必要があります

A other = (A)Page.LoadControl("~/UC/B.ascx");
myPage.Controls.Add(other);

control Aまたは、 incontrol BCode Behindofをカプセル化し、your control Bロードするために同じコードを追加しますcontrol A

于 2013-03-15T13:20:23.373 に答える