获取DetailsView和UpdatePanel之间的控件ClientID / UniqueID

时间:2010-05-26 08:17:06

标签: c# asp.net ajax detailsview

我想知道如何在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
        }
    }

也许我正在使用错误的活动?有人可以给我一个关于此的提示吗?感谢。

2 个答案:

答案 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");
}