1个列表项未触发SelectedIndexChanged事件

本文关键字:SelectedIndexChanged 事件 列表 1个 | 更新日期: 2023-09-27 18:15:52

我有一个单选按钮列表、一个标签和一个下拉列表,如下所示:

<asp:RadioButtonList id="rbList" runat="server" AutoPostBack="true" EnableViewState="false" 
            OnSelectedIndexChanged="rbList_SelectedIndexChanged" 
RepeatLayout="Table" RepeatDirection="Horizontal" RepeatColumns="3">
<asp:ListItem Selected="True"> Radio 1 </asp:ListItem>
            <asp:ListItem> Radio 2 </asp:ListItem>
            <asp:ListItem> Radio 3 </asp:ListItem>
            </asp:RadioButtonList>
<asp:Label runat="server" ID="lbl" text="1,2" EnableViewState="false"></asp:Label>
<asp:DropDownList runat="server" ID="ddl" Visible="false">                    
            </asp:DropDownList> 

我的rbList_SelectedIndexChanged如下:

protected void rbList_SelectedIndexChanged(object sender, EventArgs e)
{
    if (rbList.SelectedIndex == 0 | rbList.SelectedIndex==1)
    {
        lbl.Text = "1,2";
        ddl.Visible = false;
        //ddl.Attributes.Add("style", "display:none");
    }
    else if (rbList.SelectedIndex == 2)
    {
        lbl.Text = "3";
        ddl.Visible = true;
        //ddl.Attributes.Add("style", "");
     }
}

现在,当我从radio3更改为radio2时,事件像往常一样被触发,一切看起来都很好。但是,当我从radio3更改为radio1时,我没有看到事件被触发(我插入了一个断点),ddl保持可见,但lbl的值更改为1,2。

我的两个问题如下:

1)为什么事件在从radio3变为radio1时没有被触发?

2)当事件未触发时,标签值如何更改?

任何帮助或意见都非常感谢…提前感谢!

1个列表项未触发SelectedIndexChanged事件

我不确定这是不是一个bug,但是…

当EnableViewState="false" with DDL或RBL并且用户试图选择第一个列表项(索引0)时,SelectedIndexChanged将不会被触发。

如果您设置EnableViewState="true",那么DDL或RBL应该在用户选择第一个列表项而非第一项被选中时正常工作…

在标记中预选单选按钮会导致问题。从任何其他选项返回到选项1都不会触发更改后的事件。

这一行是你的罪魁祸首。

<asp:ListItem Selected="True"> Radio 1 </asp:ListItem>

如果您删除了Selected属性,事件应该正确注册

 <asp:ListItem> Radio 1 </asp:ListItem>

你可以在后面的代码中处理预选。

    protected void Page_Load(object sender, EventArgs e)
    {
        if(!IsPostBack)
        {
           rbList.SelectedIndex = 0;
        }
    }

据我所知,通过编程方式设置SelectedIndex(即使是在第一个帖子上)的结果与在标记上设置Selected="True"的行为相同。

唯一可靠的方法似乎是使用带有RadioButtonList的UpdatePanel作为异步触发器,确保每次更改都会更改标记。

也就是说,除非你想走jQuery的路线…

我有一个类似的问题,但它与更新面板的"ChildrenAsTriggers"属性被设置为false有关。所有其他单选按钮索引都可以正常工作,除了索引0。

如果有Ajax,确保单选按钮控件也在AjaxUpdatedControl列表中。这是解决我的问题的唯一方法

相关文章:
  • 没有找到相关文章