1

目前我有一个用于 jQuery 对话框的 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>

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

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

4

4 回答 4

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

    }
于 2014-04-12T22:18:58.727 回答
2

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

protected void grdExpense_RowCreated(object sender, GridViewRowEventArgs e)
    {
        LinkButton btnAdd = (LinkButton)e.Row.Cells[0].FindControl("btnAdd");
        if (btnAdd != null)
        {
            ScriptManager1.RegisterAsyncPostBackControl(btnAdd);
        }
    }
于 2013-01-06T14:57:01.833 回答
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>
于 2013-01-06T15:27:45.507 回答
0

我遇到了类似的问题,这篇文章对我有帮助,但我发现只有在 updatepanels UpdateMode 设置为“Always”时,在脚本管理器中注册控件才有效。如果将其设置为“有条件”,则此方法不起作用。

我发现了另一种始终有效的方法,即在 gridview 的 DataBound() 事件中向更新面板添加触发器:

    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
于 2015-08-06T01:05:16.010 回答