基础:
规则:
问题:
只要我从文本框中单击并在下拉列表中选择我的术语,下拉就会闪烁并关闭,因为文本框TextChanged事件刚刚被触发。
我必须再次点击下拉列表才能选择任何内容!
我是否需要更改我正在查看的事件或是否需要将一些控件移到UpdatePanel之外?只有在某些业务规则发生变化时才会发生这种情况吗?我应该放弃并转到javascript吗?
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<table width="100%">
<tr>
<td align="left" style="width: 10%" class="LineAlign">
</td>
<td align="left" style="width: 40%" class="LineAlign">
<asp:Label ID="lblDollarSymbol" runat="server" Text="$"/>
<asp:TextBox ID="txtDepositAmount" runat="server"
AutoPostBack="true" TabIndex="1" MaxLength="14"
ontextchanged="txtDepositAmount_TextChanged"/>
</td>
<td align="left" style="width: 30%" class="LineAlign">
<asp:DropDownList ID="ddlSelectedTerm" runat="server"
AutoPostBack="true" TabIndex="2"
onselectedindexchanged="ddlSelectedTerm_SelectedIndexChanged">
</asp:DropDownList>
</td>
<td align="center" style="width: 20%">
<asp:Label ID="lblCurrentApy" runat="server"/>
<asp:Label ID="lblPercentSymbol" runat="server" Text="%"/>
</td>
</tr>
</table>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="ddlSelectedTerm" />
<asp:AsyncPostBackTrigger ControlID="txtDepositAmount" />
</Triggers>
</asp:UpdatePanel>
答案 0 :(得分:0)
autopostback =“true”导致了这种情况,因为两个控件在离开文本框后都会重新加载。我怀疑只要它们在同一个UpdatePanel中就有办法避免这种情况。
也许您可以在文本框启动的回发后将焦点设置到下拉列表,或者您可以通过将控件放在单独的UpdatePanel中来实现此功能。但实际上这似乎是错误的方式。我会使用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#代码进行计算,并在“Recalculate()”方法中更新第二个更新面板中的标签。
这应该可行,并且使用3个更新面板为您提供更好的布局控制和更少的代码流程丑陋。
答案 1 :(得分:0)
您可以在服务器事件中使用Focus()。例如,如果您有txtBox1和txtBox2,并希望在第1个框中写入内容并在更新面板中写入内容后将焦点放在框2中。
只进入方框1的TextChange事件并写入txtBox2.Focus(),并在更新面板后,焦点将位于方框2中。:)
希望有帮助...
答案 2 :(得分:0)
我撕掉了UpdatePanel,只是做了jquery。微软。