我找不到能够解决我的下一个问题的好文章,所以如果有人得到了答案或只是答案的链接,我会很高兴。
假设我创建了一个名为MyUserControl.ascx的UserControl
我使用前缀uc
在ascx中注册<uc:MyUserControl runat="server" id="uc_test" SomeProperty="true">
<InnerContent>
...
Controls added in here....
<asp:Button runat="server" id="btn_test" Text="Test">
...
<InnerContent>
</uc:MyUserControl>
我知道如何创建用户控件以及如何向其添加属性和事件。
但是如何在我的usercontrol中创建“InnerContent”字段?
我不知道所以请稍微具体一点:)
干杯
答案 0 :(得分:2)
您通常不会使用用户控件(.ascx
)执行此操作。这完全可能。这主要在使用代码文件构建的自定义控件中完成。要完成它,您可以声明控件类,如:
[ParseChildren(true), PersistChildren(false)]
public class MyControl : Control, INamingContainer {
[PersistenceMode(PersistenceMode.InnerProperty),
TemplateContainer(InnerContentTemplate)]
public ITemplate InnerContent { get; set; }
void CreateChildControls() {
InnerContentTemplate temp = new InnerContentTemplate();
InnerContent.InstantiateIn(temp);
Controls.Add(temp);
}
}
public class InnerContentTemplate : Control, INamingContainer {
}
对于.ascx
个文件,您可以从UserControl
继承它。
ASP.NET中的模板化是一件相当复杂的事情。在答案中解释所有内容是不可能的。您应该查看一些示例和文档。
答案 1 :(得分:0)
你想创建一个模板控件,就像一个Repeater(即你有一个ItemTemplate区域,加上header和wotnot)。 Here就是一个例子。
答案 2 :(得分:0)
对Merhdad回复的评论的扩展:
这对我有用,但我似乎无法找到一种方法来重新获得我在模板中添加的控件。对此我有任何快速提示吗? - 真正的napster(14分钟前)
试过Control.FindControl
方法? - Mehrdad(8分钟前)
..................
我可以通过访问我添加到的面板找到模板..这样的事情:
pnl_content.Controls[index]
但我不知道如何从模板中获取控件..
这就是我的代码:
<uc:PopupOKCancel ClientInstanceName="pop_createCompany" runat="server" ID="pop_createCompany" OKButtonText="opret" HeaderText="Opret nyt firma">
<ContentTemplate>
<uc:CompanyDetails runat="server" id="uc_companyDetails"></uc:CompanyDetails>
</ContentTemplate>
</uc:PopupOKCancel>
CompanyDetails UserControl实际上似乎不存在..似乎只有模板存在..我已经尝试添加一些属性到Template类,所以我可以设置它们并获取它们但是这是不可能的..对于某种原因。