ASP.NET UserControls - 如何从aspx代码访问内容字段?

时间:2009-03-30 09:41:57

标签: asp.net user-controls

我找不到能够解决我的下一个问题的好文章,所以如果有人得到了答案或只是答案的链接,我会很高兴。

假设我创建了一个名为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”字段?

我不知道所以请稍微具体一点:)

干杯

3 个答案:

答案 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类,所以我可以设置它们并获取它们但是这是不可能的..对于某种原因。