2011-08-19 4 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에 선언 된 유형이 있으며 찾을 수 있습니다. 거기에 또 다른 (즉, 존재하지 않는) 유형을 선언하면 Parser Error 예외가 발생하므로 파서가이 유형을 찾고 찾은 것으로 확신합니다.

그럼에도 불구하고 ParseControl에서 생성 된 컨트롤은 System.Web.UI.Control 유형이며 Inherits 선언에 명시된 (분명히 파싱되고 위치가 지정된) 컨트롤이 아닙니다.

왜 그런가요? 그리고 컨트롤이 올바른 유형인지 어떻게 확인할 수 있습니까?

답변

1

비트 반사기를 사용한 후에 왜 컨트롤이 '잘못된'클래스인지 분명해 보입니다. 따라서 ParseControl은이 작업을 수행하는 잘못된 방법 일뿐입니다. 올바른 하나는 LoadControl이지만 그것을 사용하려면 VirtualPathProvider를 통해 생성 된 양식을 제공해야합니다. 따라서 컨트롤이 올바르게 구문 분석되도록하는 것이 훨씬 더 많은 작업이지만이 방법을 사용하면 컨트롤이로드되고 구문 분석되고 올바른 형식에서 파생됩니다.