1

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例外がスローされるので、パーサーがこの型を探して見つけると完全に確信しています。

それにもかかわらず、から生成されるコントロールはParseControlSystem.Web.UI.Control型であり、Inherits-declarationに記述されている(そして明らかに解析されて配置されている)コントロールではありません。

それはなぜですか。また、コントロールが正しいタイプであることを確認するにはどうすればよいですか。

4

1 に答える 1

1

さて、ビットリフレクターを使用した後、コントロールが「間違った」クラスである理由は明らかなようです。したがって、ParseControlは、これを行うには単に間違った方法です。正しいのはLoadControlですが、これを使用するには、VirtualPathProviderを介して生成されたフォームを提供する必要があります。したがって、コントロールを正しく解析するにはさらに多くの作業が必要ですが、このアプローチを使用すると、コントロールが読み込まれ、解析され、コンパイルされ、正しい型から派生します。

于 2011-08-19T15:12:00.210 に答える