【发布时间】:2011-08-15 18:54:24
【问题描述】:
我有一些(写得很糟糕的)遗留代码必须修改,但我在控件的前缀方面遇到了一个奇怪的问题。
主页有几个包含文件,包括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 设置,所以我编译了我的代码并将其部署到开发服务器,但行为与我的本地执行相同。
我正在使用应该是最新的源文件,我没有更改任何项目设置,所以...有什么方法可以强制 my 机器中的代码使用 : 而不是 $?或者……我错过了什么?
该项目目前在提议列表中进行完全重新架构,(所以请不要建议重新设计应用程序 ;))但同时,我有一个短期要求在这个丑陋的地方实现一些小的新功能老野兽,我必须尽快完成它。令人沮丧的是 - 我根本没有更改代码的这些部分,但行为无论如何都在改变。
更新
显然,至少在 .NET 1.1 中使用的命名前缀有些随机,因为在多次构建之后,当我尝试各种方法来解决这个问题时,控件最终获得了 正确的 名称。所以现在我只是不更改代码,这很糟糕,因为我真的很讨厌这种“在随机正确时冻结它”的方法。
【问题讨论】:
标签: c# javascript asp.net-1.1