Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否在ASP.NET 1.1中显式定义控件前缀?_C#_Javascript_Asp.net 1.1 - Fatal编程技术网

C# 是否在ASP.NET 1.1中显式定义控件前缀?

C# 是否在ASP.NET 1.1中显式定义控件前缀?,c#,javascript,asp.net-1.1,C#,Javascript,Asp.net 1.1,我有一些(写得不好的)遗留代码需要修改,但我在控件的前缀方面遇到了一个奇怪的问题 主页上有几个包含文件,包括cpct_cost.aspx。 包含的页面中有一个控制设备成本: <INPUT id="EquipmentCost" type="text" name="EquipmentCost" runat="server" size="10" onchange="TotalCost();" class="bk"> 这引发了一个客户端错误,因为当我在本地运行代码时,该控件的名称是$,而不

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

主页上有几个包含文件,包括cpct_cost.aspx。 包含的页面中有一个控制设备成本:

<INPUT id="EquipmentCost" type="text" name="EquipmentCost" runat="server" size="10" onchange="TotalCost();" class="bk">
这引发了一个客户端错误,因为当我在本地运行代码时,该控件的名称是$,而不是33;

<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设置,所以我编译了代码并将其部署到dev服务器,但行为与本地执行相同

我正在使用应该是最新的源文件,我没有更改任何项目设置,所以。。。有什么方法可以强制我的机器使用代码:而不是$?或我错过了什么

该项目目前在提案列表中,需要完全重新构建(因此,请不要建议重新设计应用程序;),但与此同时,我有一个短期要求,在这个丑陋的老怪物中实现一些小的新功能,我必须尽快完成。令人沮丧的是——我根本没有改变代码的这些部分,但行为还是在改变

更新


显然,至少在.NET1.1中使用的命名前缀有些随机,因为在几个构建之后,当我尝试各种方法解决这个问题时,控件最终得到了正确的名称。所以现在我只是不改变代码,这很糟糕,因为我真的不喜欢这种“在它随机正确时冻结它”的方法。

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

function TotalCost()
{
    var a = document.getElementById('<%= YourControl.ClientID %>').value;
}
函数总成本()
{
var a=document.getElementById(“”).value;
}
另外,如果您需要对该控件生成的id进行绝对控制,那么在asp.net 4.0中引入了ClientIDMode属性,以便开发人员能够更好地控制该id的生成方式

function TotalCost()
{
    var a = document.getElementById('<%= YourControl.ClientID %>').value;
}
看看这两个来源


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

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

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

功能总成本(txtEquipCost){
var a=txtEquipCost.value;
}
那么身份证是什么就不重要了

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

var txtEquipCost = document.getElementById('<%= YourControl.ClientID %>');
var txtOtherCost = document.getElementById('<%= YourOtherControl.ClientID %>');
var-txtEquipCost=document.getElementById(“”);
var txtOtherCost=document.getElementById(“”);
然后onChange函数调用可以是TotalCost(txtEquipCost、txtOtherCost)

编辑2:
请参阅以下有关ClientId和UniqueId的问题,这些问题可能很有用:

很遗憾,我现在被ASP.NET 1.1锁定了。我尝试了这种方法,但是由于控件是在包含文件中定义的,但是引用它的函数在不同的文件中,它似乎不喜欢这个组合。这是个好主意,除了TotalCost正在寻找大约6个不同的控件之外(我提到过这个web应用的架构很糟糕吗?通过在页面上用控件创建JS变量来扩展这个想法,例如var txtEquipCost=document.getElementById(“”);var txtOtherCost=document.getElementById(“”);然后onChange函数调用可以是TotalCost(txtEqiupCost,txtOtherCost);这是一个好主意-我将在周一尝试!非常好,谢谢!非常好地解决了一个糟糕的问题!