0

radiobuttonlist我在页面后面的代码中附加事件,单选按钮列表在
listview.当我运行程序时它会生成一个错误: “对象引用未设置为对象的瞬间”

.aspx 代码:

<asp:ListView ID="ListView1" runat="server" >
  <ItemTemplate>
       <tr><td>
  <asp:RadioButtonList ID="radiobuttonlist4" runat="server" AutoPostBack="true" 

        RepeatDirection="Horizontal"
        OnSelectedIndexChanged="selected" Width="240px">
    <asp:ListItem  Value="agree"></asp:ListItem>
       <asp:ListItem Value="disagree"></asp:ListItem>
          <asp:ListItem Value="strongagree"></asp:ListItem>
             <asp:ListItem Value="strongdisagree"></asp:ListItem>
    </asp:RadioButtonList>




</td>
       </tr>
  </ItemTemplate>
 </asp:ListView>

.aspx.cs 代码

assessdal s = new assessdal();

ListView1.DataSource = s.showop1();
ListView1.DataBind();
RadioButtonList list=  ListView1.FindControl("radiobuttonlist4") as RadioButtonList;

list.SelectedIndexChanged += new EventHandler(handle);

public void handle(object sender, EventArgs e)
{
    Label2.Text = "y";      
}
4

2 回答 2

1

首先,我修复了您代码中的大量拼写错误。

其次,它没有找到它,因为FindControl它被调用ListView1,而不是页面(或它所在的控件层次结构),并且FindControl只在该实例的子控件中查找。

尝试Page.FindControl("radiobuttonlist4")在页面中找到它。

于 2012-05-30T16:57:52.163 回答
0

您应该在 aspx 上以声明方式附加事件处理程序,这是最简单的方法。

<asp:RadioButtonList ID="radiobuttonlist4" runat="server" AutoPostBack="true" 
     RepeatDirection="Horizontal"
     OnSelectedIndexChanged="selected" 
     Width="240px">
</asp:RadioButtonList>

由于ListView可以包含多个项目,因此NamingContainer其中的控件Itemtemplate不是ListView,而是ListViewItem。这确保了每个控件在客户端都有一个唯一的 id。

所以你可以RadioButtonList通过这种方式在按钮的点击事件处理程序中找到你的:

var button = (Button)sender;
var item = (ListViewItem)button.NamingContainer;
var radiobuttonlist4 = (RadioButtonList)item.FindControl("radiobuttonlist4");

如果您想在它的SelectedIndexChanged事件中“找到” RadioButtonList,只需相应地转换sender参数 ( var rbl = (RadioButtonList)sender;)。

于 2012-05-30T18:06:04.993 回答