在updatepanels之间设置焦点

时间:2014-05-14 13:55:42

标签: asp.net asp.net-ajax updatepanel ajaxcontroltoolkit

我有两个更新面板。如果第一个文本框被触发,我将更新第二个更新面板中的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中工作。

1 个答案:

答案 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>