gpt4 book ai didi

c# - 在 ASP.NET 1.1 中显式定义控件前缀?

转载 作者:行者123 更新时间:2023-11-29 10:23:23 25 4
gpt4 key购买 nike

我有一些(写得不好的)遗留代码需要修改,但我在控件的前缀方面遇到了一个奇怪的问题。

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

最佳答案

您可以将对输入控件的引用作为参数传递给 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变量,eg:

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

然后 onChange 函数调用可以是 TotalCost(txtEquipCost, txtOtherCost)

编辑2:
请参阅有关可能有用的 ClientId 和 UniqueId 的问题: C# asp.net Why is there a difference between ClientID and UniqueID?

关于c# - 在 ASP.NET 1.1 中显式定义控件前缀?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7069300/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com