【问题标题】:I need help identifying a programming technique so that I can research and fix it我需要帮助确定一种编程技术,以便我可以研究和修复它
【发布时间】:2018-01-31 20:02:52
【问题描述】:

守则:

父控件.ascx

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="ParentControl.ascx.cs" 
Inherits="ParentControl" %>
<%@ Register Src="~/ChildControl.ascx" TagPrefix="Prefix" TagName="ChildControlTag" %>

ParentControl.ascx.cs

public partial class ParentControl : UserControl
{
   List<ASP.childcontrol_asxc> controlList = new List<ASP.childcontrol_asxc>();
   ... inside a public property setter ...
   var control = new ASP.childcontrol_ascx();  // <ABC> what the heck is this reference?
   controlList.Add(control);
   ...
}

ChildControl.ascx

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="ChildControl.ascx.cs" 
Inherits="ChildControl" %>
<asp:Repeater ID="childRepeater" runat="server" EnableViewState="false" 
ViewStateMode="Disabled">

ChildControl.ascx.cs

public partial class ChildControl : UserControl
{
   ...

   protected void Page_Load(object sender, EventArgs e)
   {
      childRepeater.DataSource = xyz;  // <XYZ> crashes if I don't use the weird reference  
   }
}

问题:

我不明白标有&lt;ABC&gt; 的参考评论是什么意思。那不是我定义的类……但 Intellisense 不会抱怨。如果我按下F12,它会将我带到 ChildControl.ascx 顶部的&lt;%@ Control ... %&gt; 标记,而不是 ChildControl.ascx.cs 中的控件定义。 我不明白这个控件的其他版本是什么,为什么它在 ASP 命名空间中,或者直接使用它而不是控件的含义是什么。更糟糕的是,这在我的本地工作站上编译得很好,但在我们用于 CI 的 TFS 服务器上会引发编译器错误。

问题:

是否有人知道这种使用/引用自定义用户控件的方法的名称,和/或有我可以查看的链接/信息以更好地了解这是什么以及含义是什么?我一直无法通过谷歌找到任何有用的东西。虽然修复/解决方法会很棒 - 我仍然希望能够研究这项技术。

探索:

我尝试用实际的类名替换用法,而不是奇怪的ASP.class_ascx 引用...如果我这样做,它编译得很好,但不幸的是它在运行时失败。似乎其他参考更改了它与 asp.NET 生命周期的交互方式 - 在子控件的 aspx 中定义的服务器控件在子控件的Page_Load() 中为空(标记为&lt;XYZ&gt;)。在奇怪的ASP.control_ascx 参考方法下,当它击中子控件的Page_Load() 时,中继器被正确定义,但我不明白为什么。

其他:

该项目通过DotNetCompilerPlatform NuGet package 在我的本地工作站上使用 Roslyn 编译器,但我相信它只是使用 CI 服务器上的 VS/TFS 2015 内置编译器。这可以解释为什么 TFS 会引发编译器错误 - 它告诉我 The type or namespace name 'usercontrol_ascx' does not exist in the namespace 'ASP' (are you missing an assembly reference?)。我正在考虑将 TFS 配置为使用 NuGet 包中的编译器,然后有望编译 - 但这仍然很奇怪,我想了解它。

【问题讨论】:

  • 您的代码缺少new 关键字。
  • 原来如此 - 不错。那只是一个复制/粘贴错误...我已经修复了它。
  • 很奇怪。想知道您是否对 mychildusercontrol 的解决方案进行了简单搜索。还要检查用户控件内的公共道具。另请注意,通过执行&lt;%@ Control Language="C#" AutoEventWireup="true" CodeFile="ChildControl.ascx.cs" Inherits="ChildControl" ClassName="childctrl" %&gt;,用户控件可以具有与文件名不同的类名。当您使用 ASP 命名空间时,class 名称 (childctrl) 将出现在智能感知中,即ASP.childctrl。最后的想法是重建(不是构建)。
  • @wazz 抱歉,错字 - 应该是 var control = new ASP.childcontrol_ascx(); 而不是 mychildusercontrol。它是在 childcontrol.aspx.cs 中定义的 ChildControl,但对它的引用很奇怪。正如 SLaks 所指出的,它是它的“编译”版本......但它仍然给我带来了问题。
  • 很难找到有关这方面的文档。

标签: c# asp.net compiler-errors language-features assembly-references


【解决方案1】:

这是 ASPX 文件编译到的类。它继承您的类并添加呈现您的 ASPX 内容的代码。

【讨论】:

  • 这是有道理的,尽管我仍然无法找到任何有关它的文档。这样直接使用正常吗?是否有一些您通常需要的程序集参考可以解释为什么它在本地编译,而不是在 CI 环境中编译?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-24
  • 2019-09-17
  • 2020-10-06
  • 1970-01-01
  • 1970-01-01
  • 2020-04-13
相关资源
最近更新 更多