当前位置:  开发笔记 > 后端 > 正文

自定义ASP.NET容器控件

如何解决《自定义ASP.NET容器控件》经验,为你挑选了2个好方法。

我一直在尝试创建一个自定义控件,其工作方式与Panel控件完全相同,除了包含几个div之外,这样可以创建一个圆角框外观.我还没有找到一个如何做到这一点的体面的例子.

我需要能够在控件内部放置文本和控件并直接访问它而无需引用面板(完全与Panel控件的工作方式相同).

有没有人有这方面的例子?



1> FlySwat..:

有两种方法可以做到这一点.一种是在你的控件上实现INamingContainer,需要付出很多努力.

另一种方法是从Panel继承,并覆盖RenderBeginTag和RenderEndTag方法以添加自定义标记.这很简单.

public class RoundedCornersPanel : System.Web.UI.WebControls.Panel
{
    public override RenderBeginTag (HtmlTextWriter writer)
    {
        writer.Write("Your rounded corner opening markup");
        base.RenderBeginTag(writer);
    }

    public override RenderEndTag (HtmlTextWriter writer)
    {
        base.RenderEndTag(writer);
        writer.Write("Your rounded corner closing markup");                     
    }
}



2> niaher..:

这里已经有了不少答案,但我只想粘贴最基本的实现而不继承Panel类.所以这里:

using System.ComponentModel;
using System.Web.UI;
using System.Web.UI.WebControls;

[ToolboxData("<{0}:SimpleContainer runat=server>")]
[ParseChildren(true, "Content")]
public class SimpleContainer : WebControl, INamingContainer
{
    [PersistenceMode(PersistenceMode.InnerProperty)]
    [TemplateContainer(typeof(SimpleContainer))]
    [TemplateInstance(TemplateInstance.Single)]
    public virtual ITemplate Content { get; set; }

    public override void RenderBeginTag(HtmlTextWriter writer)
    {
        // Do not render anything.
    }

    public override void RenderEndTag(HtmlTextWriter writer)
    {
        // Do not render anything.
    }

    protected override void RenderContents(HtmlTextWriter output)
    {
        output.Write("
"); this.RenderChildren(output); output.Write("
"); } protected override void OnInit(System.EventArgs e) { base.OnInit(e); // Initialize all child controls. this.CreateChildControls(); this.ChildControlsCreated = true; } protected override void CreateChildControls() { // Remove any controls this.Controls.Clear(); // Add all content to a container. var container = new Control(); this.Content.InstantiateIn(container); // Add container to the control collection. this.Controls.Add(container); } }

然后你可以像这样使用它:


    
        

        
    

从代码隐藏中你可以做到这样的事情:

this.btnSubmit.Text = "Click me!";
this.txtName.Text = "Jack Sparrow";

推荐阅读
可爱的天使keven_464
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有