【发布时间】:2011-02-24 01:36:15
【问题描述】:
我想知道如何在 Detailsview 控件 EditItemTemplate 元素中获取控件的 ClientID/UniqueID,以及何时将 DetailsViews 更改为编辑模式并且 DetailsView 在 AJAX UpdatePanel 内。如果没有 UpdatePanel,在 PostBack 期间我可以获得 ClientID 的控制权,但现在有了 UpdatePanel。
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:DetailsView ID="DetailsView1" runat="server" DataSourceID="SqlDataSource1" AllowPaging="true" AutoGenerateEditButton="true">
<Fields>
<asp:TemplateField>
<EditItemTemplate>
<asp:CheckBox runat="server" ID="chkboxTest" Text="CHECKBOX" />
</EditItemTemplate>
</asp:TemplateField>
</Fields>
</asp:DetailsView>
</ContentTemplate>
</asp:UpdatePanel>
如您所见,EditItemTemplate 包含一个 Checkbox 控件。因此,当 Detailsview 更改为编辑模式时,我试图获取此复选框的 ClientID。我需要这个值来处理 Javascript。
捕捉事件ChangingMode/ChangedMode 不起作用; chkbox 为空:
void DetailsView1_ModeChanged(object sender, EventArgs e)
{
if (DetailsView1.CurrentMode == DetailsViewMode.Edit)
{
var chkbox = DetailsView1.FindControl("chkboxTest"); // <== is null
}
}
也许我使用了错误的事件?有人可以给我一个提示吗?谢谢。
【问题讨论】:
-
这是您在 FindControl 中的 ModeChanged 事件中的拼写错误,它正在寻找 chkxboxTest...?如果那是您的代码,那可能就是问题所在。
-
@Mantorok。对不起错字。但仍然为空。
-
好的,然后试试 Rows[0].Cells[0].FindControl.
-
还要检查 Rows[0] 的 RowType,如果是 DataControlRowType.Header 则需要参考下一行。您的代码在上面也发生了变化,FindControl 不能直接在 DetailsView1 下工作,因为它只包含行/单元格,因此您需要深入到实际包含复选框的单元格,然后调用 FindControl。
-
@Mantorok。谢谢你的回复。第一行不是类型标题,而是 DataRow。并且在 row[0] 或 row[0].Cell[0] 上使用 FindControl 仍然为空。 :(
标签: c# asp.net ajax detailsview