为什么Page.ParseControl不会创建从正确的基类继承的控件?

时间:2011-08-19 12:33:03

标签: asp.net parsecontrol

我通过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异常,因此我完全相信解析器会查找此类型并找到它。

尽管如此,从ParseControl生成的Control是System.Web.UI.Control类型,而不是Inherits-declaration中声明的控件(显然也是解析和定位的)。 / p>

为什么这样,我怎样才能确保控件的类型正确?

1 个答案:

答案 0 :(得分:1)

好吧,在使用了一个反射器之后,似乎很明显为什么Control是'错误的'类。所以ParseControl只是做错的方法。正确的是LoadControl,但要使用它我需要通过VirtualPathProvider提供生成的表单。因此,使控件正确解析需要做更多的工作,但是在使用这种方法时,控件将被加载,解析,编译并从正确的类型派生。