我在页面后面的代码中附加了radiobuttonlist
的事件,radiobuttonlist在一个中
listview
。当我运行程序时,它会生成一个错误:
“对象referance未设置为对象的瞬间”
.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";
}
答案 0 :(得分:1)
首先,我修复了代码中的大量拼写错误。
其次,找不到它是因为在FindControl
上调用ListView1
,而不是页面(或它所在的控件层次结构),而FindControl
只在该实例的子节点内查找控制。
请尝试Page.FindControl("radiobuttonlist4")
在页面中找到它。
答案 1 :(得分:0)
你应该在aspx上以声明方式附加事件处理程序,这是最简单的方法。
<asp:RadioButtonList ID="radiobuttonlist4" runat="server" AutoPostBack="true"
RepeatDirection="Horizontal"
OnSelectedIndexChanged="selected"
Width="240px">
</asp:RadioButtonList>
由于ListView
可以包含多个项目,因此Itemtemplate
中的控件的NamingContainer
不是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;
参数。