我有一些(写得很糟糕的)遗留代码必须修改,但我在控件的前缀方面遇到了一个奇怪的问题。
主页有几个包含文件,包括 cpct_cost.aspx。在该包含的页面中是一个控制 EquipmentCost:
<INPUT id="EquipmentCost" type="text" name="EquipmentCost" runat="server" size="10" onchange="TotalCost();" class="bk">
在客户端javascript中控制的另一个页面引用:
function TotalCost()
{
var a = document.CPCT_FORM.cpct_cost_EquipmentCost.value;
这会引发客户端错误,因为当我在本地运行代码时,控件被命名为 $ 而不是 _:
<input name="cpct_cost$EquipmentCost" type="text" id="cpct_cost_EquipmentCost" size="10" onchange="TotalCost();" class="bk" />
结果,客户端javascript找不到有问题的元素。
服务器上的旧代码以不同方式处理此问题 - 控件名称被处理为:
<input name="cpct_cost:EquipmentCost" id="cpct_cost_EquipmentCost" type="text" size="10" onchange="TotalCost();" class="bk" />
并且正在正确处理。
起初我以为它可能是本地 IIS 设置,所以我编译了我的代码并将其部署到开发服务器,但行为与我的本地执行相同。
我正在使用应该是最新的源文件,我没有更改任何项目设置,所以......有什么方法可以强制我机器上的代码使用:而不是$?或者......我错过了什么?
该项目目前在提议列表中进行完全重新架构,(所以请不要建议重新设计应用程序;))但与此同时,我有一个短期要求在这个丑陋的老野兽中实现一些小的新功能,我必须尽快完成它。令人沮丧的是 - 我根本没有更改代码的这些部分,但行为无论如何都在改变。
更新
显然,至少在 .NET 1.1 中使用的命名前缀有点随机,因为经过多次构建,当我尝试各种方法来解决这个问题时,控件最终得到了正确的名称。所以现在我只是不更改代码,这很糟糕,因为我真的很讨厌这种“在随机正确时冻结它”的方法。