如何使用gridview中的按钮分配UpdatePanel触发器控件ID

时间:2013-01-06 13:26:39

标签: asp.net gridview triggers updatepanel

目前我有一个用于jQuery Dialog的UpdatePanel,它包含一个GridView。

GridView包含页脚中的FileUpload控件和EmptyDataTemplate

为了让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>

如果我将按钮ID直接放在触发器的控件ID中,则会出现错误,说无法找到btnAdd ...

我该怎么做才能让FileUpload控件工作?

4 个答案:

答案 0 :(得分:4)

这有效

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);
        }

    }

答案 1 :(得分:2)

尝试从后面的代码注册回发控制,如下所示:

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

答案 2 :(得分:2)

您可以尝试在模板内部的链接按钮周围添加更新面板,而不是向upnlEditExpense添加触发器,而不是触发...

<asp:TemplateField>
     <FooterTemplate>
          <asp:UpdatePanel ID="upnlBtnAdd" runat="server">
              <ContentTemplate>
                    <asp:LinkButton runat="server" ID="btnAdd" Text="Add" OnClick="btnAdd_Click"></asp:LinkButton>
              </ContentTemplate>
          </asp:UpdatePanel>
     </FooterTemplate>
</asp:TemplateField>

答案 3 :(得分:0)

我遇到了类似的问题,这篇文章对我有所帮助,但我发现只有在updatepanels UpdateMode设置为&#34; Always&#34;时,才能在scriptmanager中注册控件。如果设置为&#34;条件&#34;这种方法不起作用。

我发现另一种方法总是有效,即在gridview的DataBound()事件中向updatepanel添加触发器:

    Dim CheckBoxTrigger As UpdatePanelControlTrigger = New AsyncPostBackTrigger()
    Dim SelectCheckBox As CheckBox
    For i = 0 To GridViewEquipment.Rows.Count - 1 Step 1
        SelectCheckBox = GridViewEquipment.Rows(i).Cells(12).FindControl("CheckBoxSign")
        CheckBoxTrigger.ControlID = SelectCheckBox.UniqueID
        UpdatePanelEquipment.Triggers.Add(CheckBoxTrigger)
    Next