【发布时间】:2014-01-28 18:58:06
【问题描述】:
所以我觉得这真的很奇怪,我想知道是否有人听说过这样的事情或者可以理解可能发生的事情......
我有一个用户控件 foo.ascx。在 foo.ascx 中,我声明了 3 个公共属性:val1 val2 和 val3。每个都声明相同:public int。
在一个页面中,我使用我的 foo 控件,并在标签中设置了 val1="10" val2="11" val3="12"。请注意,我在 Visual Studio 中执行此操作,并且智能感知会验证我的属性是否按预期存在。
我在 Page_Load 方法中设置了一个断点并检查属性值:val1 为 10,val2 为 0,val3 为 12。WTF?
所以最初我的属性只是 { get;放; } 类型属性,但出于调试目的,我将一些代码放入每个的 get 和 set 方法中。我在每个设置器中放置了一个断点,我可以在其中检查“值”。每个属性的设置器都有其断点命中,除了 val2 没有任何反应。
我还在 global.asax.cs 中有一个 Application_Error 处理程序,它有一个活动断点,并且没有检测到错误。
有没有人听说过这样的属性被跳过,或者有没有人知道我可以如何更好地跟踪请求的执行以找出真正发生的事情?
编辑:我正在使用 .NET 3.5 并在 Visual Studio 2008 的本地开发服务器上运行
编辑 #2:我无法发布代码,因为它不是我的公司,但我可以说:
- 控件仅继承自 System.Web.UI.UserControl
- 我在类中每个方法的开头都有一个断点,并且除了 setter 和 Page_Load 之外,没有执行类中的任何代码。
编辑#3:
好的,这很有趣。我开始认为,不知何故存在编译器未捕获的命名冲突(顺便说一句,没有与此问题相关的编译器警告),但无法理解名称的来源。现在我看到名称 sort of 存在于同一范围内。该属性的实际名称是“ClientId”,它与“ClientID”非常接近,事实证明它是我通过 UserControl 继承的 System.Web.UI.Control 的成员。现在从技术上讲,C# 区分大小写,所以它不是命名冲突……但是标记呢?那是区分大小写的吗?我不知道,我的谷歌搜索似乎同时显示“是”和“否”。
所以无论如何我通过检查我的控件的 ClientID 属性对此进行了测试,它仍然设置为自动生成的。但那是因为这个属性是只读的......我是否可能因为我处于不区分大小写的环境中而无意中尝试分配给不同的属性?就像我说的我无法验证,因为 ClientID 是只读的,但这对我来说似乎非常明智。
【问题讨论】:
-
可能与page lifecycle有关
-
我猜你在某个地方遇到了逻辑错误。也许给我们看一些代码,以便我们看看。
-
@Jagd 请参阅编辑#2 ...如果可以的话,我会发布代码,但是考虑到除了 Page_Load 和我在任何地方都看不到的设置器之外,没有代码在执行存在逻辑错误。我错过了什么吗?
-
@CDspace 您认为这与页面生命周期有何具体关系?
-
@Paul 您声明您正在使用用户控件。在尝试设置用户控件之前,我遇到了初始化和加载订单的问题
标签: c# asp.net webforms user-controls