gpt4 book ai didi

asp.net - 无法在 asp.net Repeater 控件中找到控件

转载 作者:行者123 更新时间:2023-12-03 17:53:07 26 4
gpt4 key购买 nike

这让我难住了。我试图在动态加载的 asp.net Repeater 模板中找到一个复选框。模板工作正常,数据绑定(bind)正常,一切显示正常,但我找不到控件!有什么想法吗?

这是转发器代码(我有一个类似的替代模板,但样式不同):

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="template-tasks-

incomplete.ascx.cs" Inherits="controls_template_tasks_incomplete" %>
<ItemTemplate>
<div class="task">
<div class="date"><asp:CheckBox ID="chkIsComplete" runat="server"
AutoPostBack="True" /><%# DataBinder.Eval(((RepeaterItem)Container).DataItem, "DateCreated")%></div>
<div class="description"><%# DataBinder.Eval(((RepeaterItem)Container).DataItem, "TaskDescription")%></div>
</div>
</ItemTemplate>

这就是我加载模板的方式(工作正常)

rptTasks.ItemTemplate = LoadTemplate("~/controls/template-tasks-incomplete.ascx");
rptTasks.AlternatingItemTemplate = LoadTemplate("~/controls/template-tasks-incomplete-alt.ascx");

...最后这就是我尝试找到复选框的方式(但一直显示为空)

protected void rptTasks_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item)
{
CheckBox chkBoxIsComplete = (CheckBox)e.Item.FindControl("chkIsComplete");

if (chkBoxIsComplete != null)
{
int taskID = (int)DataBinder.Eval(e.Item.DataItem, "TaskID");
}
}
}

我只能认为该复选框隐藏在某个层次结构的更深处,但我不确定如何访问它,因为我认为 FindControl 会这样做。

这是生成的 HTML:

<ItemTemplate>
<div class="task">
<div class="date"><input id="ctl00_ContentPlaceHolder1_rptTasks_ctl00_ctl00_chkIsComplete" type="checkbox" name="ctl00$ContentPlaceHolder1$rptTasks$ctl00$ctl00$chkIsComplete" onclick="javascript:setTimeout('__doPostBack(\'ctl00$ContentPlaceHolder1$rptTasks$ctl00$ctl00$chkIsComplete\',\'\')', 0)" />23/08/2010 11:53:00 PM</div>
<div class="description">test task</div>
</div>

最佳答案

我的工具包中有这个扩展方法:

    /// <summary>
/// find the control with the given ID, recursively below the root
/// </summary>
public static Control FindControlRecursive( this ControlCollection root, string id )
{
foreach ( Control control in root )
{
if ( control != null && id.Equals( control.ID, StringComparison.InvariantCultureIgnoreCase ) )
{
return control;
}
else
{
Control result = FindControlRecursive( control.Controls, id );
if ( result != null )
{
return result;
}
}
}

return null;
}

用法:

CheckBox chkBoxIsComplete = (CheckBox)e.Item.Controls.FindControlRecursive("chkIsComplete");

关于asp.net - 无法在 asp.net Repeater 控件中找到控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3550234/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com