2011-08-19 37 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提供生成的表單。因此,要正確解析控件還有很多工作要做,但是當使用這種方法時,控件將從正確的類型加載,解析,編譯並派生。

相關問題