Почему Page.ParseControl не создает элемент управления, унаследованный от правильного базового класса? - PullRequest
1 голос
/ 19 августа 2011

Я динамически создаю пользовательский элемент управления из XML через XSLT.Выходные данные - это строка с таким содержимым:

<%@ 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 и не относится к элементу управления, который указан (и, очевидно, также проанализирован и найден) в объявлении наследования.

Почему это так и как я могугарантировать, что контроль имеет правильный тип?

1 Ответ

1 голос
/ 19 августа 2011

Хорошо, после использования немного отражателя кажется очевидным, почему Control принадлежит «неправильному» классу.Так что ParseControl - просто неправильный метод для этого.Правильным является LoadControl, но для его использования мне нужно предоставить сгенерированную форму через VirtualPathProvider.Так что для правильного анализа элемента управления требуется гораздо больше работы, но при использовании этого подхода элемент управления загружается, анализируется, компилируется и выводится из правильного типа.

...