如何从gridview的按钮分配UpdatePanel触发器的控件ID

Iva*_* Li 1 asp.net gridview triggers updatepanel

目前,我有一个供jQuery Dialog使用的UpdatePanel,其中包含一个GridView。

GridView在页脚和EmptyDataTemplate中包含一个FileUpload控件

为了使FileUpload控件能够在javascript中工作,我知道我们需要触发器。

但是,我想分配为触发器的按钮在GridView的模板中...

单击btnAdd按钮后,将保存FileUpload控件中的文件。


这是代码:

<asp:UpdatePanel ID="upnlEditExpense" runat="server">
      <Triggers>
            <asp:AsyncPostBackTrigger ControlID="btnAdd"/>
      </Triggers>
            ......................
                 ........................
                       .........................
      <asp:GridView runat="server" ID="grdExpense" ShowHeader="True" ShowFooter="True"
           AutoGenerateColumns="False">
           <Columns>
                 ...................
                 <asp:TemplateField>
                       <FooterTemplate>
                              <asp:LinkButton runat="server" ID="btnAdd" Text="Add" OnClick="btnAdd_Click"></asp:LinkButton>
                       </FooterTemplate>
                 </asp:TemplateField>
           </Columns>
      </asp:GridView>
</asp:UpdatePanel>
Run Code Online (Sandbox Code Playgroud)

如果我将按钮ID像这样直接放在触发器的控件ID中,则会出现错误,提示找不到btnAdd ...

我应该怎么做才能使FileUpload控件正常工作?

小智 5

这有效

protected void grdExpense_RowCreated(object sender, GridViewRowEventArgs e)
    {
        LinkButton btnAdd = (LinkButton)e.Row.Cells[0].FindControl("btnAdd");
        if (btnAdd != null)
        {
            ScriptManager.GetCurrent(this).RegisterPostBackControl(btnAdd);
        }

    }
Run Code Online (Sandbox Code Playgroud)