【问题标题】:cant access child control with FindControl()无法使用 FindControl() 访问子控件
【发布时间】:2012-12-12 00:56:57
【问题描述】:

所有这些都发生在同一个用户控件中,因此不应该有所作为。

<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>

我在转发器的 itemcreated 事件中有以下代码:

 protected void rptActivity_ItemCreated(object sender, RepeaterItemEventArgs e)
        {
            var helper = (UpdateActivitiesHelper)e.Item.DataItem;

            DropDownList ddl = (DropDownList)FindControl("ddlStatuses");
            ddl.SelectedValue = helper.StatusId.ToString();
        }

当我尝试使用 ddl 时,它会抛出 NullReferenceException

有什么想法吗?

【问题讨论】:

  • 您的意思是(DropDownList)e.Item.FindControl("ddlStatuses"); 吗?
  • 宾果游戏!写这个作为答案,我会选择它作为正确的!
  • 没问题,很高兴我能帮上忙。

标签: c# asp.net findcontrol


【解决方案1】:

由于您的下拉列表位于中继器内,因此请确保引用 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();
}

【讨论】:

    【解决方案2】:

    尝试像下面这样修改您的 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();
        }
    }
    

    【讨论】:

    • 这是正确的答案.. 但是 bryan cosby 先回答了。我会接受他的回答。我也赞成你的回答。感谢您的宝贵时间。
    • 德拉甘没问题。只要您的问题得到解决,一切都不重要。
    猜你喜欢
    • 2010-12-08
    • 1970-01-01
    • 1970-01-01
    • 2011-04-27
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 2010-12-26
    • 1970-01-01
    相关资源
    最近更新 更多