我有两个更新面板。如果第一个文本框被触发,我将更新第二个更新面板中的DropDownList。这适用于代码隐藏:
Protected Sub tb1_TextChanged(sender As Object, e As EventArgs) Handles tb1.TextChanged
'code for the databind
ddl2.DataBind()
up2.Update()
End Sub
现在如何将焦点设置在第二个更新面板的下拉列表中?
<ajaxToolkit:ToolkitScriptManager
ID="tsm1" EnablePartialRendering="true" runat="server">
</ajaxToolkit:ToolkitScriptManager>
<asp:UpdatePanel ID="up1" UpdateMode="Conditional" ChildrenAsTriggers="false" runat="server">
<ContentTemplate>
<asp:textbox id="tb1" runat="server" />
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="tb1" />
</Triggers>
</asp:UpdatePanel>
<asp:UpdatePanel ID="up2" UpdateMode="Conditional" ChildrenAsTriggers="false" runat="server">
<ContentTemplate>
<asp:DropDownList ID="ddl2" runat="server"></asp:DropDownList>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="ddl2" />
</Triggers>
</asp:UpdatePanel>
我在.NET 4.5和ajaxControlToolkit 7.1213中工作。
答案 0 :(得分:0)
如果您不反对使用javascript或jQuery,可以在下拉列表中的第二个更新面板中放置一些以检查文本框值,如果它不为空,请将焦点设置在下拉列表中。这样,每次重新加载第二个更新面板时,脚本都会执行。这是我正在谈论的一个例子,这段代码尚未经过测试:
<script type="text/javascript">
var txtbox = document.getElementById('up1');
if(txtbox != undefined && txtbox.value != '')
{
document.getElementById("up2").focus();
}
</script>
编辑 - 经过一些研究后,我发现这个解决方案可能效果更好,请试一试:
<script type="text/javascript">
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);
function EndRequestHandler(sender, args)
{
document.getElementById("ddl2").focus();
}
</script>