2011-08-19 33 views
1

我通过XSLT动态地从XML创建用户控件。输出是这样的内容的字符串:为什么Page.ParseControl不能创建从正确的基类继承的控件?

<%@ 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中声明的类型是存在的并且可以找到。如果我在那里声明另一个(即不存在的)类型,则会抛出异常,所以我完全相信解析器会查找此类型并找到它。

不过,从ParseControl生成的控件的类型是System.Web.UI.Control,而不是在Inherits-declaration中声明的控件(显然也是解析和定位的)。

这是为什么,我如何确保控件的类型正确?

回答

1

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

相关问题