Проблемы с сохранением значений при обратной отправке в JavaScript вычислениях

Привет всем! У меня проблема с веб-приложением на ASP.NET. Я использую пошаговый мастер и на одном из шагов есть JavaScript функция для расчетов. Все считается правильно, но когда переходишь на следующий шаг и возвращаешься назад, некоторые значения пропадают.

Вот моя функция для расчетов:

function ComputeValues() {
    fldPrice = document.getElementById('<%=fldPrice.ClientID %>');
    fldAssets = document.getElementById('<%=fldAssets.ClientID %>');
    fldPayment = document.getElementById('<%=fldPayment.ClientID %>');
    
    var pattern = /[$,]/g;
    
    // Проверка пустых значений
    PriceValue = (PriceValue == "" ? "$0" : PriceValue);
    AssetsValue = (AssetsValue == "" ? "$0" : AssetsValue);
    PaymentValue = (PaymentValue == "" ? "$0" : PaymentValue);
    
    // Убираем символы валюты
    PriceValue = fldPrice.value.replace(pattern, "");
    AssetsValue = fldAssets.value.replace(pattern, "");
    PaymentValue = fldPayment.value.replace(pattern, "");
    
    // Устанавливаем новые значения
    fldProfit.value = "$" + (PriceValue - AssetsValue);
    fldRemaining.value = "$" + (PriceValue - PaymentValue);
    
    if (chkFinancing.checked == 1) {
        fldFinancingPercent.value = Math.round((PriceValue - PaymentValue) / PriceValue * 100);
    } else {
        fldFinancingPercent.value = "0";
    }
}

Проблема в том что:

Некоторые поля сохраняют значения после postback, а некоторые нет. Поле fldFinancingPercent всегда возвращается пустым, а другие процентные поля показывают 0.

Вызываю функцию через onkeyup события:

If Not Page.IsPostBack Then
    fldPrice.Attributes.Add("onkeyup", "ComputeValues()")
    fldAssets.Attributes.Add("onkeyup", "ComputeValues()")
    fldPayment.Attributes.Add("onkeyup", "ComputeValues()")
End If

Кто-нибудь сталкивался с такой проблемой? Буду благодарен за помощь!

Тут дело в том что вычисляемые поля не участвуют в ViewState по умолчанию. Добавь runat="server" для fldFinancingPercent и других полей которые теряются, либо используй скрытые поля для хранения значений. Еще вариант - вызывать ComputeValues() в событии Page_Load на клиенте через RegisterStartupScript, чтобы пересчитать после каждого postback. У меня так же было с калькуляторами.

Смотри, проблема может быть в том что переменные PriceValue, AssetsValue и PaymentValue не объявлены через var. Они становятся глобальными и могут конфликтовать. Попробуй добавить var перед каждой переменной. А вообще какие именно поля у тебя runat=server? И может стоит в Page_PreRender вызывать ComputeValues через ClientScript?