У меня есть (плохо написанный) устаревший код, который мне нужно изменить, но у меня странная проблема с префиксом элементов управления.
На главной странице есть несколько включаемых файлов, включая cpct_cost.aspx.
На этой странице есть элемент управления. Стоимость оборудования:
<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, поэтому я скомпилировал свой код и развернул его на сервере dev, но поведение было идентично моему локальному выполнению.
Я использую, как предполагается, последние исходные файлы, я не изменил никаких настроек проекта, так что ... есть ли способ заставить код использовать мой компьютер для использования вместо $? Или ... что мне не хватает?
В настоящее время проект находится в списке предложений, который будет полностью реархитирован (поэтому, пожалуйста, никаких предложений по изменению дизайна приложения;)), но в то же время у меня есть краткосрочное требование для реализации некоторых незначительных новых функций в этом уродливом старый зверь, и я должен сделать это как можно скорее. Что расстраивает - я не изменил эти части кода вообще , но поведение все равно меняется.
UPDATE
Очевидно, префикс именования, используемый по крайней мере в .NET 1.1, несколько случайный, потому что после нескольких сборок, когда я пытался обойти это, элементы управления в итоге получили правильное имя. Так что теперь я просто не изменяю код, который отстой, потому что я очень не хочу использовать этот подход "заморозить, пока он случайно не правильный".