這讓我難住。我正試圖在動態加載的asp.net Repeater模板中找到一個複選框。該模板工作正常,數據綁定是好的,一切都很好,但我找不到控制!有任何想法嗎?無法找到控制在asp.net中繼器控制
這是中繼器代碼(我有一個類似的備用模板用不同的風格):
<%@ 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");
}
}
}
I c只是認爲複選框被深埋在層次結構的某個地方,但我不確定如何訪問它,因爲我認爲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>
似乎在第一個綁定上工作,但在複選框回發事件它丟失它 - 也許是因爲它是一個動態加載的模板。 – Dkong 2010-08-23 18:25:29
@Dkong不確定動態部分是否重要。你有'ViewState'關閉'Repeater'嗎?請記住,如果您再次重新綁定(不檢查「!IsPostBack」)或關閉「ViewState」,綁定代碼將會消失,因此每次請求都會重新綁定。 – Kelsey 2010-08-23 20:57:39