【问题标题】:Why does Page.ParseControl not create control inherited from the correct base class?为什么 Page.ParseControl 不创建从正确基类继承的控件?
【发布时间】:2011-08-19 12:33:03
【问题描述】:

我通过 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 异常,因此我完全相信解析器会查找并找到它。

尽管如此,从ParseControl 生成的控件属于 System.Web.UI.Control 类型,而不是在继承声明中声明(并且显然也已解析和定位)的控件。

为什么会这样?如何确保控件的类型正确?

【问题讨论】:

    标签: asp.net parsecontrol


    【解决方案1】:

    好的,在使用位反射器之后,为什么 Control 属于“错误”类似乎很明显。所以 ParseControl 是完全错误的方法。正确的是 LoadControl,但要使用它,我需要通过 VirtualPathProvider 提供生成的表单。所以要让控件正确解析还有很多工作要做,但是当使用这种方法时,控件会被加载、解析、编译并从正确的类型派生。

    【讨论】:

      猜你喜欢
      • 2011-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-11
      • 2011-12-08
      • 1970-01-01
      • 2023-04-01
      相关资源
      最近更新 更多