为什么我的单选按钮列表仅在选定值= 1时触发

本文关键字:1时 单选按钮 我的 列表 为什么 | 更新日期: 2023-09-27 17:50:20

我不知道为什么只有当我选择第二个列表项时,我的radiobuttonlist才会着火!

My aspx:

    <asp:Panel ID="pnl_select_sign" runat="server" Visible="false">
            <asp:RadioButtonList ID="rb_select_sign" runat="server" AutoPostBack="true" RepeatDirection="Horizontal"
                OnSelectedIndexChanged="rb_select_sign_SelectedIndexChanged" CausesValidation="false" AppendDataBoundItems="true">
                <asp:ListItem Selected="True" Value="0">normal</asp:ListItem>
                <asp:ListItem Value="1">abnormal</asp:ListItem>
            </asp:RadioButtonList>
    </asp:Panel> 
  <div class="events" dir="rtl">
        <fieldset>
            <asp:UpdatePanel ID="UpdatePanel1" runat="server">
                <ContentTemplate>
                    <asp:Panel ID="pnl_PageNew_UC" runat="server" Width="100%">
                    </asp:Panel>
                    <asp:Panel ID="pnl_sign" runat="server" Width="100%" Visible="false">
                    </asp:Panel>
                </ContentTemplate>
                <Triggers>
                    <asp:AsyncPostBackTrigger ControlID="rb_select_sign" EventName="SelectedIndexChanged" />
                </Triggers>
            </asp:UpdatePanel>
        </fieldset>
    </div>

My .cs:

 protected void rb_select_sign_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (rb_select_sign.SelectedValue == "0")
            {
                pnl_PageNew_UC.Visible = true;
                pnl_sign.Visible = false;
            }
            else
            {
                pnl_PageNew_UC.Visible = false;
                pnl_sign.Visible = true;
            }
        }

为什么我的单选按钮列表仅在选定值= 1时触发

好吧,你的问题开始不是当selectedvalue =1,它开始一旦你设置面板的可见性为真。

问题本身是在你的AsyncPostBackTrigger,你的触发器是外面的 UpdatePanel,因此不再触发。

这很容易解决,把RadioButtonList放到ContentTemplate中:

<asp:UpdatePanel ID="UpdatePanel1" runat="server">
  <ContentTemplate>
    <asp:Panel ID="pnl_select_sign" runat="server" >
        <asp:RadioButtonList ID="rb_select_sign" runat="server" AutoPostBack="true" RepeatDirection="Horizontal" ... />
    </asp:Panel> 
    <asp:Panel ID="pnl_PageNew_UC" runat="server" Width="100%">
    </asp:Panel>
....

试试下面的代码:

<asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Conditional">
        <ContentTemplate>
            <asp:Panel ID="pnl_select_sign" runat="server">
                <asp:RadioButtonList ID="rb_select_sign" runat="server" AutoPostBack="true" RepeatDirection="Horizontal"
                    OnSelectedIndexChanged="rb_select_sign_SelectedIndexChanged" CausesValidation="false"
                    AppendDataBoundItems="true">
                    <asp:ListItem Selected="True" Value="0">normal</asp:ListItem>
                    <asp:ListItem Value="1">abnormal</asp:ListItem>
                </asp:RadioButtonList>
            </asp:Panel>
        </ContentTemplate>
    </asp:UpdatePanel>
    <div class="events" dir="rtl">
        <fieldset>
            <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
                <ContentTemplate>
                    <asp:Panel ID="pnl_PageNew_UC" runat="server" Width="100%">
                        123
                    </asp:Panel>
                    <asp:Panel ID="pnl_sign" runat="server" Width="100%" Visible="false">
                        312
                    </asp:Panel>
                </ContentTemplate>
                <Triggers>
                    <asp:AsyncPostBackTrigger ControlID="rb_select_sign" EventName="SelectedIndexChanged" />
                </Triggers>
            </asp:UpdatePanel>
        </fieldset>
    </div>

后面的代码:

        protected void rb_select_sign_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (rb_select_sign.SelectedValue == "0")
            {
                pnl_PageNew_UC.Visible = true;
                pnl_sign.Visible = false;
            }
            else
            {
                pnl_PageNew_UC.Visible = false;
                pnl_sign.Visible = true;
            }
            UpdatePanel1.Update();
        }