1

現在、GridView を含む jQuery ダイアログ用の UpdatePanel があります。

その 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

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 に答える
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 に答える
0

同様の問題があり、この投稿が役に立ちましたが、scriptmanager でのコントロールの登録は、updatepanels の UpdateMode が「Always」に設定されている場合にのみ機能することがわかりました。「条件付き」に設定されている場合、このアプローチは機能しません。

グリッドビューの 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
于 2015-08-06T01:05:16.010 に答える