如何访问.aspx页面中的控件

时间:2012-05-30 16:41:54

标签: c# asp.net .net radiobuttonlist

我在页面后面的代码中附加了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";      
}

2 个答案:

答案 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;参数。