3

我有一些(写得很糟糕的)遗留代码必须修改,但我在控件的前缀方面遇到了一个奇怪的问题。

主页有几个包含文件,包括 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 中使用的命名前缀有点随机,因为经过多次构建,当我尝试各种方法来解决这个问题时,控件最终得到了正确的名称。所以现在我只是不更改代码,这很糟糕,因为我真的很讨厌这种“在随机正确时冻结它”的方法。

4

2 回答 2

2

您可以更改 Javascript 以使用生成的 id。

function TotalCost()
{
    var a = document.getElementById('<%= YourControl.ClientID %>').value;
}

此外,如果您需要对该控件的生成 id 进行绝对控制,事实证明,在 asp.net 4.0 中引入了 ClientIDMode 属性,以便开发人员可以更好地控制该 id 的生成方式。

看看这两个来源

http://msdn.microsoft.com/en-us/library/system.web.ui.control.clientid.aspx

http://weblogs.asp.net/asptest/archive/2009/01/06/asp-net-4-0-clientid-overview.aspx

于 2011-08-15T19:31:03.177 回答
2

您可以将输入控件的引用作为参数传递给 JS 函数,即:

<INPUT id="EquipmentCost" type="text" name="EquipmentCost" runat="server" size="10" onchange="TotalCost(this);" class="bk">

function TotalCost(txtEquipCost) {
var a = txtEquipCost.value;
}

那么id是什么都没关系。

编辑:
如果您有更多控件,请在页面上创建 JS 变量,例如:

var txtEquipCost = document.getElementById('<%= YourControl.ClientID %>');
var txtOtherCost = document.getElementById('<%= YourOtherControl.ClientID %>');

那么 onChange 函数调用可以是 TotalCost(txtEquipCost, txtOtherCost)

EDIT2:
请参阅这个关于 ClientId 和 UniqueId 的问题,这可能有用: C# asp.net 为什么 ClientID 和 UniqueID 之间有区别?

于 2011-08-19T14:37:40.353 回答