サイトを検索しましたが、問題の解決策が見つからないため、すでに回答されている場合はお詫びします(誰かが以前にこれを尋ねたに違いありません)。
WebControlおよびIScriptControlとしてパッケージ化したjQueryポップアップウィンドウを作成しました。最後のステップは、コントロールのタグ内にマークアップを書き込めるようにすることです。InnerProperty属性を数回使用しましたが、厳密に型指定されたクラスのリストを含めるためだけです。
WebControlのプロパティは次のとおりです。
[PersistenceMode(PersistenceMode.InnerProperty)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public something??? Content
{
get
{
if (_content == null)
{
_content = new something???();
}
return _content;
}
}
private something??? _content;
これが私が求めているもののHTMLマークアップです:
<ctr:WebPopup runat="server" ID="win_Test" Hidden="false" Width="100px" Height="100px"
Modal="true" WindowCaption="Test Window" CssClass="window">
<Content>
<div style="display:none;">
<asp:Button runat="server" ID="Button1" OnClick="Button1_Click" />
</div>
<%--Etc--%>
<%--Etc--%>
</Content>
</ctr:WebPopup>
残念ながら、Contentプロパティのタイプがわかりません。基本的にUpdatePanel
'sを複製する必要がありContentTemplate
ます。
編集:以下では、テンプレートコンテナを自動的に作成できますが、コントロールが表示されません。私が行っていることの何が問題になっていますか?
[PersistenceMode(PersistenceMode.InnerProperty)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public ITemplate Content
{
get
{
return _content;
}
set
{
_content = value;
}
}
private ITemplate _content;
EDIT2:CreateChildControlsをオーバーライドすると、ITemplate内のコントロールをレンダリングできます。
protected override void CreateChildControls()
{
if (this.Content != null)
{
this.Controls.Clear();
this.Content.InstantiateIn(this);
}
base.CreateChildControls();
}
残念ながら、ファイルの分離コードファイルからITemplate内のコントロールにアクセスできなくなりました。つまり、マーク内にボタンをそのように配置した場合:
<ctr:WebPopup runat="server" ID="win_StatusFilter">
<Content>
<asp:Button runat="server" ID="btn_Test" Text="Cannot access this from code behind?" />
</Content>
</ctr:WebPopup>
btn_Test
その後、コードビハインドからアクセスできなくなります。
protected void Page_Load(object sender, EventArgs e)
{
btn_Test.Text = "btn_Test is not present in Intellisense and
is not accessible to the page. It does, however, render correctly.";
}
EDIT3:修正済み!編集2は正しい解決策です。VisualStudios2010がお尻の痛みだっただけです。アプリを閉じて再度開くと、Contentプロパティ内のすべてのコントロールにページからアクセスできました。
EDIT4:Edit2は問題を修正しませんでした。誰かが言及する前に私はすでにその[TemplateInstance(TemplateInstance.Single)]
属性を試していましたが、当時はそれが違いを生んだとは思いませんでした。VisualStudios2010は今日奇妙なものになっているようです。
タグを削除して機能し続けたので、属性に違いはないと思いました。コードに戻ってから、コントロールは使用できなくなりました。属性を追加し直すと、すべてが機能し、サーバー側でコントロールにアクセスできるようになります。マッドネス。ブライアンが誰よりも早く修正について言及したので、私はブライアンの答えを受け入れます。