文本框仍显示在UpdatePanel中

时间:2011-09-07 12:56:54

标签: c# jquery toggle

我想根据用户在组合框中的选择隐藏Updatepanel中的文本框。它在UpdatePanel之外运行良好,但是当我放入UpdatePanel时它停止工作并且不再隐藏文本框。你能帮我解决这个问题吗?感谢。

我的编码如下:

<script language="javascript" type="text/javascript">

        var prm = Sys.WebForms.PageRequestManager.getInstance();
        prm.add_endRequest(BindControls);

        $().ready(function () {    

            BindControls();    

            $("#<%= ddlType.ClientID %>").change();    

        });

        function BindControls() {

            $("#<%= ddlType.ClientID %>").change(function () {
                ShowHideCalendars();
            });
        }

        function ShowHideCalendars() {
            $("#trDates").toggle($("#<%= ddlType.ClientID %>").val() == "T1");
        }

    </script>

        <asp:UpdatePanel runat="server">
            <contenttemplate>
        <asp:DropDownList runat="server" id="ddlType" AutoPostBack="True" 
                    onselectedindexchanged="ddlType_SelectedIndexChanged">            
            <asp:ListItem>T1</asp:ListItem>
            <asp:ListItem>T2</asp:ListItem>            
        </asp:DropDownList>

        <table>
            <tr>
                <td>Row 1</td>
            </tr>
            <tr id="trDates">
                <td>From: <asp:TextBox ID="TextBox1" runat="server" CssClass="dtpicker"></asp:TextBox>&nbsp;&nbsp;To: <asp:TextBox ID="TextBox2" runat="server" CssClass="dtpicker"></asp:TextBox></td>
            </tr>
            <tr>
                <td><asp:Literal ID="ltStatus" runat="server" Text="You haven't selected."></asp:Literal></td>
            </tr>
        </table>
        </contenttemplate>
        </asp:UpdatePanel>

2 个答案:

答案 0 :(得分:0)

发生的情况如下 - 您在客户端切换文本框可见性,但随后发生回发。当文本框位于UpdatePanel内时,它们将再次呈现,并且切换操作将丢失。

你可以做两件事:

1)如果您在更改下拉值时正在执行的操作是切换文本框可见性,则可能会丢失AutoPostBack="True"OnSelectedIndexChanged事件。

2)如果您做的不仅仅是并且需要服务器端调用,则可以在服务器端事件中设置文本框可见性。

答案 1 :(得分:0)

通常,在updatepanel中为控件添加处理程序时使用live()jQuery方法更安全

但是,我不确定它是否能解决你的问题