当通过javascript设置值时,RadioButtonList不会在后续更改事件上触发

时间:2014-12-17 17:26:58

标签: javascript c# asp.net events

我有一个带有2个选项的RadioButtonList作为ListItems,带有服务器OnSelectedIndexChanged事件和clientside onchange事件。标记代码如下所示:

<asp:RadioButtonList ID="rdViewSelection" 
         runat="server" RepeatDirection="Horizontal" AutoPostBack="true"
           OnSelectedIndexChanged="rdoSelection_SelectedIndexChanged"    
           onchange="SelectedIndexChanged();">
       <asp:ListItem Enabled="true" Selected="True" 
            Text="1" Value="1"</asp:ListItem>
      <asp:ListItem Enabled="true" Selected="False" 
            Text="2" Value="2"></asp:ListItem>
</asp:RadioButtonList>

控件的Javascript方法Client onchange事件如下所示:

function SelectedIndexChanged() {
    var rdoSelection = document.getElementById("<%=rdoSelection.ClientID%>");
     for (var i = 0; i < rdoSelection.cells.length; i++) {
         for (var x = 0; x < rdoSelection.cells[i].all.length; x++) {
             if (rdoSelection.cells[i].all[x].checked) {
                 // Store value in Hidden Field
                 document.getElementById("<%=SelectedValue.ClientID%>").value = rdoSelection.cells[i].all[x].defaultValue;
             }
         }
     }
 }

我还有一个asp:LinkBut​​ton控件,当用户点击它时执行一些服务器端操作;但除了调用的服务器方法之外,还有一个onClientClick方法可以更改RadioButtonList的选定值。

为了简单起见,我删除了导致我遇到的问题的所有客户端代码,但它看起来像这样:

function ChangeSelectedIndex()
{
    rdoSelection.cells[1].childNodes[0].checked = true;
}

当通过从LinkedButton调用的客户端代码更改RadioButtonList的选定节点时,会在页面上成功更改该值,并触发Server OnSelectedIndexChanged事件。

但是如果我手动单击未选择的节点(在第一次程序更改之后),则不会调用服务器端的OnSelectedIndexChanged方法。但是,在成功调用服务器事件之后执行的任何选择更改。它好像第一次手动更改(在客户端方法以编程方式处理的更改之后)被忽略为ServerSide事件。然后,任何手动更改都会与服务器同步。

如何确保RadioButtonList的每个更改事件都触发服务器端OnSelectedIndexChanged事件以及为什么通过Javascript更改所选索引会导致第二个手动更改没有实际意义并且在此之后恢复功能???

所有这些控件都驻留在UserControl中。

1 个答案:

答案 0 :(得分:0)

如果你没有设置RepeatDirection它应该工作。