我通过 XSLT 从 XML 动态创建用户控件。输出是一个字符串,内容如下:
<%@ Control Language="C#" AutoEventWireup="true" Inherits="Library.Web.UI.GeneratedFormBase, MyAssembly" %>
<div class="myCssClass">
<asp:TextBox ID="d" runat="server" OnTextChanged="OnTextChanged" />
<asp:Label runat="server" AssociatedControlID="SomeName" AccessKey="n">Label Text</asp:Label>
<asp:TextBox ID="SomeName" runat="server" OnTextChanged="OnTextChanged" />
<asp:Label runat="server" AssociatedControlID="SomeOtherName">Welcome</asp:Label>
<asp:TextBox ID="SomeOtherName" runat="server" OnTextChanged="OnTextChanged" />
<asp:Button ID="OK" runat="server" OnClick="ButtonClick" Text="Save" />
</div>
我现在使用 Page.ParseControl(theGeneratedString) 来动态创建这个控件。
声明的类型Inherits
是存在的并且可以找到。如果我在那里声明另一个(即不存在的)类型,Parser Error
则会引发异常,因此我完全相信解析器会查找该类型并找到它。
尽管如此,从 生成的 Control 是ParseControl
System.Web.UI.Control 类型,而不是在 Inherits-declaration 中声明(并且显然也已解析和定位)的控件。
为什么会这样?如何确保控件的类型正确?