C# 奇怪:财产;“设置”;在ASP.NET中,未实际设置标记
所以我觉得这真的很奇怪,我想知道是否有人听说过类似的事情,或者能够理解可能发生的事情 我有一个用户控件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:我不能发布代码,因为这是我的公司,不是我的公司,但我可以说: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方法中放置了一个断点,并检查了
所以无论如何,我通过检查控件的ClientID属性来测试它,它仍然设置为自动生成的属性。但那是因为这个属性是只读的。。。是否可能是因为我处于不区分大小写的环境中而无意中尝试分配给其他属性?就像我说的,我无法验证,因为ClientID是只读的,但这对我来说似乎非常合理。没有看到代码,我只能猜测。然而,我怀疑某处有打字错误。也许你设置了两次val3
不管怎么说,这些问题往往在逻辑上很明显,但在屏幕上很难看到。我也只是猜测,但除了明显的难以找到的打字错误之外,是否您对不起作用的属性使用了某种保留/特殊字?(“保留”在最广泛的意义上) 如果将代码和页面中的
val2
更改为类似于when-spelledlikethistworks
,会发生什么情况
现在我看到名称排序存在于同一范围内。属性的实际名称是“ClientId”,这与“ClientId”非常接近,它是System.Web.UI.Control的成员,我通过UserControl继承它。现在技术上C#是区分大小写的,所以它不是命名冲突。。。但是标记呢?那是区分大小写的吗?我不知道,我的谷歌搜索似乎同时显示“是”和“否”
我相信标记是不区分大小写的(很容易检查,所以我将把它留给您去做)。因此,如果您有多个只在大小写上不同的属性,它将更新第一个匹配属性
我要看的是从标记生成的源代码。一个简单的方法是:
- 将包含编译错误的服务器脚本块添加到标记中:
<script runat="server"> Some invalid C# syntax </script>
一些无效的C#语法
- 在调试器下运行并导航到相关页面
- 将显示一个错误页面,其中包含显示完整生成的源代码的链接
- 检查源代码以查看正在设置的属性