ASP.NET自定义控件时的RenderContents

为了将项目中的一部分数据绑定到DropdownList中,决定自定义一个DropdownList,即使自定义控件继承自DropdownList

在自定义控件中定义了一个方法用以绑定业务数据,如下:

public void BuildTree(String loginName)
        {
            var orgnization = Organization.LoadByUserLoginName(loginName);
            DataSource = orgnization.ChildOUs;
            DataTextFormatString = GetPre(orgnization) + "{0}";
            DataTextField = "Name";
            DataValueField = "ID";
            DataBind();
            Items.Insert(0, orgnization.ToListItem());
        }

但在将自定义控件拖到页面上,并调用BuildTree方法后,发现DropwdownList的内容始终为空,便怀疑是datasoure的源数据为空,但在跟踪调试时发现,orgnization.ChildOUs是有数据的。这时只好用Reflector反编译软件看下都有哪些地方对Items进行了调用

因为DropdownList是继承自ListControls的,所以Items的定义在ListControls中,发现Items在RenderContents方法中被调用了,并且将其生成了最终的HTML代码option.

这时发现自定义控件在创建时,会用模自动生成覆盖RenderContents的方法,如下:

        
 protected override void RenderContents(HtmlTextWriter output)
         {
            output.Write(Text);
        }
即默认情况下,模板会重写RenderContents方法,而这个方法在MSDN中定义是这样的:

将控件的内容呈现到指定的编写器中,HtmlTextWriter,表示要在客户端呈现 HTML 内容的输出流。

由此可以看到这个方法是用来最终定义输入HTML的内容的,原因找到,所以在开发自定义控件时,一定要注意RenderContents是不是实现了你最终想的HTML输出。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值