这让我感到困惑。我正在尝试在动态加载的asp.net Repeater模板中查找复选框。模板正常工作,数据绑定也正常,一切都正常显示,但我找不到控件!有什么想法吗?
这是repeater代码(我有一个类似的备用模板,具有不同的样式):
我只能想到复选框被深埋在层次结构中的某个地方,但我不确定如何访问它,因为我以为FindControl会做到这一点。
这是生成的HTML代码:
这是repeater代码(我有一个类似的备用模板,具有不同的样式):
<%@ 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");
最后,这是我尝试查找复选框的方法(但一直返回null)
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>