autopostback = "true" в вашем текстовом поле вызывает это, так как оба элемента управления перезагружаются после того, как они покидают текстовое поле.Я сомневаюсь, что есть способ избежать этого, если они находятся в одной и той же UpdatePanel.
Возможно, вы могли бы установить фокус на раскрывающийся список после обратной передачи, инициируемой текстовым полем, или вы могли бы сделать это, поместив элементы управления в отдельные UpdatePanels.Но на самом деле это кажется неправильным путем.Я бы использовал javascript (и ajax, если логика сложная) для обновления APY.Или просто добавьте кнопку «Рассчитать» ...
(Правка) Вот немного уродливый хак, чтобы избежать ajax, трех панелей обновления и все еще иметь возможность работать на стороне логического сервера.Я не одобряю этот метод, но он быстрый и грязный.
Поместите элемент управления Label, содержащий результаты расчета, в UpdatePanel.Элементы управления вводом не обязательно должны быть в UpdatePanel.
На панели обновлений (с результатами) есть скрытая кнопка отправки:
<asp:Button ID="DoCalculate" style="display:none;" UseSubmitBehavior="false"
runat="server" OnClick="Recalculate()" />
Это должен быть триггер для UpdatePanel,Затем попросите два элемента управления вводом нажать эту кнопку с помощью JavaScript, чтобы вызвать частичную обратную передачу на панель «результатов».Вот код для добавления этого javascript для выпадающего списка, например, в Page_Load
:
ddSelectedTerm.Attributes.Add("onSelectedIndexChanged",
"document.getElementByID('" + DoCalculate.ClientID + "').Click()");
Затем введите код C #, чтобы выполнить расчет, и обновите метку на 2-й панели обновления вМетод "Recalculate ()".
Это должно сработать и дать вам лучший контроль над макетом и меньше уродства потока кода, чем при использовании 3 панелей обновления.