我想知道如何在Detailsview控件EditItemTemplate元素中获取控件的ClientID / UniqueID,以及当DetailsViews更改为Edit模式并且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为null:
void DetailsView1_ModeChanged(object sender, EventArgs e)
{
if (DetailsView1.CurrentMode == DetailsViewMode.Edit)
{
var chkbox = DetailsView1.FindControl("chkboxTest"); // <== is null
}
}
也许我正在使用错误的活动?有人可以给我一个关于此的提示吗?感谢。
答案 0 :(得分:2)
好的,最好的办法是为 OnDataBound 实现一个处理程序,然后执行以下操作:
protected void databound(object sender, EventArgs e)
{
if (DetailsView1.CurrentMode == DetailsViewMode.Edit)
{
var control = DetailsView1.Rows[0].Cells[1].FindControl("chkboxTest");
if (control != null)
{
// Write some JS...
}
}
}
答案 1 :(得分:0)
void DetailsView1_ModeChanged(object sender,EventArgs e) { if(DetailsView1.CurrentMode == DetailsViewMode.Edit) var chkbox = DetailsView1.Rows [0] .FindControl(“ chkxboxTest ”); //&lt; ==为空 }
enboldened文本是拼写错误吗?
我没有太多使用DetailsView但是让我们的行[0]不是标题行,行下是否有任何单元格?就像GridView一样。
更新:我假设您想要做的就是在用户更新项目后捕获控件?将事件处理程序分配给OnItemUpdating并尝试以下操作:
protected void updating(object sender, DetailsViewUpdateEventArgs e)
{
var control = DetailsView1.Rows[int.Parse(e.CommandArgument.ToString())].Cells[1].FindControl("chkboxTest");
}