技术开发 频道

asp.net控件开发基础(14)

        [IT168  技术文档]上一篇讨论了为服务器控件添加客户端功能,这一篇我们所要讲的是控件生成器


1.错误的代码,无法解析

首先来看一段简单的代码

 正确
            
<asp:Wizard ID="Wizard1" runat="server">
                
<WizardSteps>
                    
<asp:WizardStep ID="WizardStep1" runat="server" Title="Step 1">
                        21212
</asp:WizardStep>
                    
<asp:WizardStep ID="WizardStep2" runat="server" Title="Step 2">
                    
</asp:WizardStep>
                
</WizardSteps>
            
</asp:Wizard>
            错误
            
<asp:Wizard ID="Wizard2" runat="server">
                
<asp:WizardStep ID="WizardStep1" runat="server" Title="Step 1">
                    21212
</asp:WizardStep>
                
<asp:WizardStep ID="WizardStep2" runat="server" Title="Step 2">
                
</asp:WizardStep>
            
</asp:Wizard>
            
<br />
            
<br />
            
<asp:Label ID="Label1" runat="server" Text="Label">
                
<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
            
</asp:Label>
            
<br />
            
<asp:TextBox ID="TextBox3" runat="server">12345</asp:TextBox>
            
<br />
            
<asp:Label ID="Label2" runat="server" Text="Label">12345</asp:Label>
            
<br />
            
<br />
            
<asp:TextBox ID="TextBox1" runat="server">
        
<asp:Label runat="server" Text="Label"></asp:Label>
            
</asp:TextBox>

Wizard为asp.net2.0新增的一个控件,这个页面发生两个错误,如下图



运行此页面后则会报错,出现以下提示

分析器错误

这里有一个问题,.net提供我们控件时,我们已经形成一种定向思维,控件就是那样写的,如DropDownList,其中只能是套<asp:ListItem>的,那我为什么就不能套别的属性呢?Wizard控件为什么就要加一个WizardSteps属性才可以正常运行呢?当我们思考到这里,我们就该寻找答案.

2.从ParseChildren元数据属性讲起

从第五篇开始,我们多次用到了ParseChildren此特性.还请大家先看MSDN对其的解释,其有三种情况

(1)ParseChildren(true)     第5篇我们使用集合属性的时候我们曾经这样定义,如下代码

   [ParseChildren(true)]
    
public class Custom: Control
    
{
    }


(2)ParseChildren(true,"<Default Property>") 第10篇当我们定义集合属性时,我们曾这样定义

DropItemList为集合属性
   [ParseChildren(true"DropItemList")]
   
public class DropColor:WebControl
    
{
   }


(3)ParseChildren(false)  这个我们没用过,也是我们要讲的内容,当其内部定义为flase时,那么放在此控件内的元素将被解析成控件,应该说是页分析器ControlBuilder 类.这里大家可以看看MSDN文档对ControlBuilder 类的解释,至少要先知道这一点
默认情况下,页上的每个控件都与一个默认的 ControlBuilder 类关联。

下面我们慢慢看下来.
0
相关文章