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 类关联。
下面我们慢慢看下来.