我想在UpdatePanel1中添加下面的属性
<Triggers>
            <asp:AsyncPostBackTrigger ControlID="LinkButton1" EventName="Click" />
</Triggers>
可是我的"LinkButton1"是在UpdatePanel2中的一个DetailsView的模板列里的,如果直接按上面那样写的话会提示找不到"LinkButton1"
我想是不是可以通过编程的方式,先找到"LinkButton1",再通过后代码的方式实现
<Triggers>
            <asp:AsyncPostBackTrigger ControlID="LinkButton1" EventName="Click" />
</Triggers>
怎么实现?

解决方案 »

  1.   

    可是我的"LinkButton1"是在UpdatePanel2中的一个DetailsView的模板列里的,如果直接按上面那样写的话会提示找不到"LinkButton1" 
    我想是不是可以通过编程的方式,先找到"LinkButton1",再通过后代码的方式实现 
    -----------------------
    找到了,也不触发onclick事件,触发的是detailsview的command事件
      

  2.   


    谢谢!
    <Triggers>
                <asp:AsyncPostBackTrigger ControlID="DetailsView1" />
                </Triggers>
    这样就可以了。我没有写事件名,如果要写个事件名,事件名是什么?我做插入操作的。
      

  3.   

    谢谢!
    <Triggers>
                 <asp:AsyncPostBackTrigger ControlID="DetailsView1" />
                 </Triggers>
    这样就可以了。我没有写事件名,如果要写个事件名,事件名是什么?我做插入操作的。
    不好意思 我引用错了。
      

  4.   

    LinkButton1 在updatepanel里
    就不用加triggers了吧
      

  5.   

    把<Triggers> 
                 <asp:AsyncPostBackTrigger ControlID="LinkButton1" EventName="Click" /> 
    </Triggers> 处理的,放在GridView1_RowDataSound(object sender, GridViewRowEventArgs e)
    {
    //在写里.就可以找得到了.}
      

  6.   

    To 7楼:
    昨晚,我只给点提示,谁知lz还想不明,今早,我帖出来,仅供你参考 protected void gvAppointment_OnItemDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                if (e.Row.FindControl("LinkButton1") != null)
                {
                    LinkButton lnkB = (LinkButton)e.Row.FindControl("LinkButton1");
                    ScriptManager1.RegisterAsyncPostBackControl(lnkB);
                }
            }
        }
      

  7.   

    ControlID 如果是detailsview1的话 
    EventName就是要写 detailsview1中某个事件的名称 
    一般用不到EventName另:ControlId为LinkButton1 不行吗? updatepanel中updatemode=contional设置了?
      

  8.   

    是这样的,我是通过GridView来显示数据,DetailsView 来插入数据的。
    UpdatePanel1和UpdatePanel2 的 UpdateMode 都设置为contional
    GridView1放在UpdatePanel1 里,DetailsView1放在UpdatePanel2里
    我想通过DetailsView1的插入按钮(我把它转换为模板列了)来触发
    UpdatePanel1的更新。如果我把UpDatePanel1 设为 
    <Triggers>
                 <asp:AsyncPostBackTrigger ControlID="DetailsView1" />
    </Triggers> 
    这样当我点击DetailsView的取消按钮时它也触发了UpDatePanel1的更新。
    我只想让插入按钮触发更新。
      

  9.   

    不知道为什么我昨天用
    <Triggers> 
                  <asp:AsyncPostBackTrigger ControlID="DetailsView1" /> 
                  </Triggers> 
    可以,刚又突然发现不可以了。怪!
    ---------------------------------------------------------------------------------------To 7楼: 
    昨晚,我只给点提示,谁知lz还想不明,今早,我帖出来,仅供你参考 C# code
     protected void gvAppointment_OnItemDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                if (e.Row.FindControl("LinkButton1") != null)
                {
                    LinkButton lnkB = (LinkButton)e.Row.FindControl("LinkButton1");
                    ScriptManager1.RegisterAsyncPostBackControl(lnkB);
                }
            }
        }----------------------------------------------------------------
    按你的方法我这样写
    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            LinkButton lbtn = (LinkButton)this.DetailsView1.FindControl("LinkButton1");
            ScriptManager1.RegisterPostBackControl(lbtn);    }
    这样还是更新不了。
    是不是要加个this.UpdatePanel1.Update();
    加在哪里?
      

  10.   

    this.UpdatePanel1.Update();
    这个不用加也好像可以的
      

  11.   

    非常感谢insus的提示,问题已解决!
     protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            LinkButton lbtn = (LinkButton)this.DetailsView1.FindControl("LinkButton1");
            ScriptManager1.RegisterAsyncPostBackControl(lbtn);    }
        protected void LinkButton1_Click(object sender, EventArgs e)
        {
            this.UpdatePanel1.Update();
        } 
      

  12.   

    aspx file:
    <body>
        <form id="form1" runat="server">
            <asp:ScriptManager ID="ScriptManager1" runat="server" />
            <div>
            <asp:UpdatePanel ID="UpdatePanel2" runat="server" >
                <ContentTemplate>  
                <asp:GridView ID="GridView1" runat="server" OnRowDataBound="GridView1_RowDataBound">
                    <Columns>
                        <asp:TemplateField>
                            <ItemTemplate>
                                <asp:LinkButton ID="lbTest" runat="server" OnClick="lbTest_Click" >LinkButton</asp:LinkButton>
                            </ItemTemplate>
                        </asp:TemplateField>
                        
                    </Columns>
                </asp:GridView>
               </ContentTemplate> 
            </asp:UpdatePanel> 
            </div>
            <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
                <ContentTemplate>
                    <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
                </ContentTemplate> 
            </asp:UpdatePanel>
        </form>
    </body>.cs file:  protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                if (e.Row.FindControl("lbTest") != null)
                {
                    LinkButton lnkB = (LinkButton)e.Row.FindControl("lbTest");
                    lnkB.Attributes.Add("ID", e.Row.Cells[1].Text);
                    ScriptManager1.RegisterAsyncPostBackControl(lnkB);
                }
            }
        }
        
        protected void lbTest_Click(object sender, EventArgs e)
        {
            //TextBox1.Text = DateTime.Now.ToLongTimeString();
            LinkButton lnkB = (LinkButton)sender;
            TextBox1.Text = lnkB.Attributes["ID"];
            UpdatePanel1.Update();
        }