SelectedIndexChanged事件未针对1个列表项触发

时间:2013-05-29 20:14:21

标签: c# asp.net radiobuttonlist selectedindexchanged

我有一个radiobuttonlist,一个标签和一个下拉列表,如下所示:

<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)当事件未触发时,标签值如何变化?

非常感谢任何帮助或评论。谢谢!

4 个答案:

答案 0 :(得分:2)

我不确定这是不是一个错误,但是......

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

如果设置EnableViewState =“true”,那么当用户选择第一个列表项而选择了非第一个项目时,DDL或RBL应该可以正常工作...

答案 1 :(得分:1)

在标记中预选单选按钮会导致您的问题。从任何其他选项返回到选项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;
        }
    }

答案 2 :(得分:1)

据我所知,以编程方式设置SelectedIndex(即使在第一篇文章中)也会产生与设置Selected =&#34; True&#34;相同的行为。在标记上。

唯一可靠的方式似乎是使用UpdatePanel和RadioButtonList作为异步触发器,确保标记随着每次更改而改变。

也就是说,除非你想去jQuery路线..

答案 3 :(得分:0)

我有类似的问题,但它与&#34; ChildrenAsTriggers&#34;更新面板的属性设置为false。除索引0外,所有其他单选按钮索引都正常工作。