【问题标题】:Why my radio button list fires only when the selected value = 1为什么我的单选按钮列表仅在选定值 = 1 时触发
【发布时间】:2012-12-30 16:17:19
【问题描述】:

我不知道为什么我的radiobuttonlist 只有在我选择第二个列表项时才会触发!

我的 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>

我的 .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;

            }
        }

【问题讨论】:

    标签: c# asp.net ajax updatepanel radiobuttonlist


    【解决方案1】:

    好吧,您的问题不是从selectedvalue =1 开始的,而是在您将面板的可见性设置为 true 时开始的。

    问题本身在于您的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>
    ....
    

    【讨论】:

    • 由于页面设计的原因,有时您无法将所有控件都放在更新面板中。
    • @just_name 我同意,这很烦人 - 但过了一段时间你开始掌握它...... :)
    • @namkha87 - 你不需要所有的控件,你只需要任何你想作为回发触发器的东西......
    【解决方案2】:

    试试这个代码:

    <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();
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-16
      • 2015-03-09
      • 1970-01-01
      • 2013-11-07
      • 1970-01-01
      • 1970-01-01
      • 2014-06-29
      • 1970-01-01
      相关资源
      最近更新 更多