C# 无法使用FindControl()访问子控件

C# 无法使用FindControl()访问子控件,c#,asp.net,findcontrol,C#,Asp.net,Findcontrol,所有这些都发生在同一个用户控件中,因此不应产生任何影响 <asp:Repeater ID="rptActivity" runat="server" OnItemCreated="rptActivity_ItemCreated"> <ItemTemplate> <div class="under-label"> <div class="activity"> <%#E

所有这些都发生在同一个用户控件中,因此不应产生任何影响

<asp:Repeater ID="rptActivity" runat="server" OnItemCreated="rptActivity_ItemCreated">
    <ItemTemplate>
        <div class="under-label">
            <div class="activity">
                <%#Eval("ActivityName")%>
                <input type="hidden" name="activityId" value='<%#Eval("ActivityId")%>' />
            </div>

            <div class="status">
                <asp:DropDownList ID="ddlStatuses" DataSourceID="SqlDataSource1"  DataTextField="Name" DataValueField="Id"  runat="server"></asp:DropDownList>
            </div>
            <div class="comment">
                <textarea name="comments" cols="35" rows="3" name="comment" style="float: left; margin: 0px 0px 0px 25px; font-family: Geneva, Arial, Helvetica, sans-serif;"><%#Eval("Comment")%></textarea>
            </div>
        </div>
    </ItemTemplate>
</asp:Repeater>
当我尝试使用ddl时,它抛出
NullReferenceException


有什么想法吗?

试着像下面这样修改ItemCreated eventHandler,看看它是否有效

protected void rptActivity_ItemCreated(object sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item){
        var helper = (UpdateActivitiesHelper)e.Item.DataItem;
        DropDownList ddl = (DropDownList)e.Item.FindControl("ddlStatuses");
        ddl.SelectedValue = helper.StatusId.ToString();
    }
}

尝试像下面这样修改ItemCreated eventHandler,看看它是否有效

protected void rptActivity_ItemCreated(object sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item){
        var helper = (UpdateActivitiesHelper)e.Item.DataItem;
        DropDownList ddl = (DropDownList)e.Item.FindControl("ddlStatuses");
        ddl.SelectedValue = helper.StatusId.ToString();
    }
}

由于您的下拉列表位于中继器内,请确保引用
DataItem
以查找控件

确保使用
e.Item.FindControl
而不是
Page.FindControl
--
Page.FindControl
将找不到此项目,因为它不会递归搜索页面

protected void rptActivity_ItemCreated(object sender, RepeaterItemEventArgs e)
{
    var helper = (UpdateActivitiesHelper)e.Item.DataItem;
    DropDownList ddl = (DropDownList)e.Item.FindControl("ddlStatuses");
    ddl.SelectedValue = helper.StatusId.ToString();
}

由于您的下拉列表位于中继器内,请确保引用
DataItem
以查找控件

确保使用
e.Item.FindControl
而不是
Page.FindControl
--
Page.FindControl
将找不到此项目,因为它不会递归搜索页面

protected void rptActivity_ItemCreated(object sender, RepeaterItemEventArgs e)
{
    var helper = (UpdateActivitiesHelper)e.Item.DataItem;
    DropDownList ddl = (DropDownList)e.Item.FindControl("ddlStatuses");
    ddl.SelectedValue = helper.StatusId.ToString();
}

你是说
(DropDownList)e.Item.FindControl(“DDLStatus”)?宾果!写下这个作为答案,我会选择它作为正确的答案!没问题,很高兴我能帮忙。你是说
(DropDownList)e.Item.FindControl(“ddlstatus”)?宾果!写下这个作为答案,我会选择它作为正确的答案!没问题,很高兴我能帮上忙。这是正确的答案。。然而,布莱恩·科斯比首先回答了这个问题。我接受他的回答。我也对你的答案投了赞成票。谢谢你的时间,非常感谢。没问题,德拉根。只要你的问题得到解决,什么都不重要。这是正确的答案。。然而,布莱恩·科斯比首先回答了这个问题。我接受他的回答。我也对你的答案投了赞成票。谢谢你的时间,非常感谢。没问题,德拉根。只要你的问题得到解决,什么都不重要。