C# 奇怪:财产;“设置”;在ASP.NET中,未实际设置标记

C# 奇怪:财产;“设置”;在ASP.NET中,未实际设置标记,c#,asp.net,webforms,user-controls,C#,Asp.net,Webforms,User Controls,所以我觉得这真的很奇怪,我想知道是否有人听说过类似的事情,或者能够理解可能发生的事情 我有一个用户控件foo.ascx。在foo.ascx中,我声明了3个公共属性:val1 val2和val3。每个都以相同的方式声明:public int 在一个页面中,我使用foo控件,在标记中设置val1=“10”val2=“11”val3=“12”。请注意,我正在Visual Studio中执行此操作,intellisense将验证我的属性是否按预期存在 我在Page_Load方法中放置了一个断点,并检查了

所以我觉得这真的很奇怪,我想知道是否有人听说过类似的事情,或者能够理解可能发生的事情

我有一个用户控件foo.ascx。在foo.ascx中,我声明了3个公共属性:val1 val2和val3。每个都以相同的方式声明:public int

在一个页面中,我使用foo控件,在标记中设置val1=“10”val2=“11”val3=“12”。请注意,我正在Visual Studio中执行此操作,intellisense将验证我的属性是否按预期存在

我在Page_Load方法中放置了一个断点,并检查了属性值:val1是10,val2是0,val3是12。WTF

因此,最初我的属性只是{get;set;}类型的属性,但出于调试目的,我为每个属性在get和set方法中添加了一些代码。我在每个setter中放置了一个断点,在这里我可以检查“值”。每个属性的setter都有它的断点命中,只有val2没有发生任何事情

我在global.asax.cs中还有一个带有活动断点的应用程序错误处理程序,没有检测到任何错误

有没有人听说过像这样跳过某个属性,或者有人知道我如何更好地跟踪请求的执行情况以了解到底发生了什么

编辑:我正在使用.NET3.5并在VisualStudio2008的本地开发服务器上运行

编辑#2:我不能发布代码,因为这是我的公司,不是我的公司,但我可以说:

  • 该控件仅从System.Web.UI.UserControl继承
  • 我在类中每个方法的开头都有一个断点,并且除了setter和Page_Load之外,类中没有执行任何代码
  • 编辑#3:

    好的,这很有趣。我开始想,不知何故,有一个命名冲突没有被编译器捕获(顺便说一句,没有与此问题相关的编译器警告),但无法理解名称可能来自何处。现在我看到名称排序存在于同一范围内。属性的实际名称是“ClientId”,这与“ClientId”非常接近,它是System.Web.UI.Control的成员,我通过UserControl继承它。现在技术上C#是区分大小写的,所以它不是命名冲突。。。但是标记呢?那是区分大小写的吗?我不知道,我的谷歌搜索似乎同时显示“是”和“否”


    所以无论如何,我通过检查控件的ClientID属性来测试它,它仍然设置为自动生成的属性。但那是因为这个属性是只读的。。。是否可能是因为我处于不区分大小写的环境中而无意中尝试分配给其他属性?就像我说的,我无法验证,因为ClientID是只读的,但这对我来说似乎非常合理。

    没有看到代码,我只能猜测。然而,我怀疑某处有打字错误。也许你设置了两次val3


    不管怎么说,这些问题往往在逻辑上很明显,但在屏幕上很难看到。

    我也只是猜测,但除了明显的难以找到的打字错误之外,是否您对不起作用的属性使用了某种保留/特殊字?(“保留”在最广泛的意义上)

    如果将代码和页面中的
    val2
    更改为类似于
    when-spelledlikethistworks
    ,会发生什么情况

    现在我看到名称排序存在于同一范围内。属性的实际名称是“ClientId”,这与“ClientId”非常接近,它是System.Web.UI.Control的成员,我通过UserControl继承它。现在技术上C#是区分大小写的,所以它不是命名冲突。。。但是标记呢?那是区分大小写的吗?我不知道,我的谷歌搜索似乎同时显示“是”和“否”

    我相信标记是不区分大小写的(很容易检查,所以我将把它留给您去做)。因此,如果您有多个只在大小写上不同的属性,它将更新第一个匹配属性

    我要看的是从标记生成的源代码。一个简单的方法是:

    • 将包含编译错误的服务器脚本块添加到标记中:

      <script runat="server">
        Some invalid C# syntax
      </script>
      
      
      一些无效的C#语法
      
    • 在调试器下运行并导航到相关页面

    • 将显示一个错误页面,其中包含显示完整生成的源代码的链接

    • 检查源代码以查看正在设置的属性


    可能与逻辑错误有关,我猜您可能有逻辑错误。也许给我们看一些代码,让我们看看。@Jagd请参阅编辑#2。。。但是,如果可以,我会发布代码,因为除了Page_Load和setter之外,类中没有任何代码在执行,我在任何地方都看不到这种逻辑错误的存在。我遗漏了什么吗?@CDspace您认为这与页面生命周期有多大关系?@Paul您表示您正在使用用户控件。我以前在尝试设置用户控件时遇到初始化和加载命令的问题,正如我所说,intellisense确认变量的存在和拼写。此外,我确实将属性名从C#代码复制/粘贴到了标记中,以确保这一点。我很确定它的拼写正确。至于设置两次值,我在setter中有一个断点,它永远不会被击中,这是我的问题(比如说,不是一个异常值)。这也是我现在想的。。。请参见编辑#3。如果我发现标记的确认不区分大小写,那么这很可能就是答案。生成的源代码似乎正确:((System.Web.UI.IAttributeAccessor)(@u ctrl)).SetAttribute(“ClientId”,“82”);但是我不知道这个SetAttribute方法是如何工作的。。。我会在google上搜索它。我看到HtmlControl类有一个SetAttribute()的不区分大小写的实现。我想可能UserControl也不区分大小写,但是文档