0

アプリに「Excel にエクスポート」オプションがあります。そのボタンをクリックすると、ユーザーに確認メッセージが表示されます。ユーザーが [OK] をクリックすると、JavaScript を使用してクリック イベントを呼び出しています。

<asp:Content ID="Content3" ContentPlaceHolderID="PagePlaceholder" runat="Server">
<asp:ScriptManager ID="smMainpage" runat="server">
</asp:ScriptManager>
<table style="width: 100%">
    <tr>
        <td colspan="2">
            <asp:UpdatePanel runat="server" ID="up">
                <ContentTemplate>
                    <div style="text-align: left; font-size: 8pt" id="div5" runat="server">
                        <table width="100%" cellpadding="0" cellspacing="0">
                            <tr>
                                <td align="right" style="width: 50%">
                                    <table>
                                        <tr>
                                            <td style="display: none">
                                                <asp:Button ID="btnblkupdate" runat="server" Text="None" OnClick="btnblkupdate_click" />
                                                <div>
                                                    <asp:Button ID="btnhdnExport" runat="server" OnClick="btnhdnExport_click" /></div>
                                            </td>
                                            <td>
                                                &nbsp;
                                                <asp:LinkButton ID="lnkExport" OnClick="lnkExport_Click" CssClass="customFont" runat="server"
                                                    Text="Export to Excel"></asp:LinkButton>
                                                &nbsp;
                                            </td>
                                            <td>
                                                &nbsp;
                                                <asp:LinkButton ID="lnkbtnFilter" OnClick="lnkbtnFilter_Click" CssClass="customFont"
                                                    runat="server" Text="Filter Data"></asp:LinkButton>
                                                &nbsp;
                                            </td>
                                            <td>
                                                <asp:LinkButton ID="lnkReset" OnClick="lnkReset_Click" Visible="false" CssClass="customFont"
                                                    runat="server" Text="Reset Filter"></asp:LinkButton>
                                                &nbsp;
                                            </td>
                                            <td>
                                                <asp:LinkButton ID="lnkbtnViewAll" OnClick="lnkbtnViewAll_Click" runat="server" Text="View All"></asp:LinkButton>
                                                &nbsp; Selected Records:<asp:Label ID="lblselTsks" Width="20px" Font-Size="10pt"
                                                    Font-Bold="true" runat="server" Text="0"></asp:Label>
                                                &nbsp;
                                            </td>
                                            <td>
                                                Total Records found:&nbsp;<asp:Label ID="lblTotRecCount" Font-Bold="true" runat="server"
                                                    ForeColor="Black" Font-Size="10pt" Text="0"></asp:Label>
                                            </td>
                                        </tr>
                                    </table>
                                </td>
                            </tr>
                        </table>
                    </div>
                </ContentTemplate>
                <Triggers>
                    <asp:PostBackTrigger ControlID="lnkExport" />
                    <asp:PostBackTrigger ControlID="btnhdnExport" />
                </Triggers>
            </asp:UpdatePanel>
            <asp:UpdateProgress ID="UpdateProgress5" EnableViewState="false" AssociatedUpdatePanelID="up"
                DisplayAfter="10" runat="server">
                <ProgressTemplate>
                </ProgressTemplate>
            </asp:UpdateProgress>
        </td>
    </tr>
</table>

protected void lnkExport_Click(object sender, EventArgs e)
{
    DataSet dsResult = new DataSet();
    try
    {
        string strName = string.Empty;
        clsSearch_BL clsObj = new clsSearch_BL();
        //dsResult = (DataSet)Session["SearchRes"];

        if (Session["detObj"] != null)
        {
            DetState detObj = (DetState)Session["detObj"];
            dsResult = clsObj.getSearchResults_BL(detObj);
            HashSet<string> orderIdclmtest = new HashSet<string>();
            int j = dsResult.Tables[0].Rows.Count;
            for (int k = 0; k < j; k++)
            {
               orderIdclmtest.Add( dsResult.Tables[0].Rows[k][1].ToString());
            }
             Session["orderIdclmtest"] = orderIdclmtest.ToString();

            HashSet<string> strtest = new HashSet<string>();
            strtest =(HashSet<string>)Session["orderIdclm"];

            var testttt=strtest.Except(orderIdclmtest).ToList();
            int cnt = testttt.Count;
            StringBuilder str = new StringBuilder();
            for (int i = 0; i < cnt; i++)
            {
                if (str.Length == 0)
                    str.Append(testttt[i]);
                else
                    str.Append(", " + testttt[i]);
            }
            ScriptManager.RegisterClientScriptBlock(this.up, this.GetType(), "export", "hdnExportExcel()", true);
            //if (testttt != null && testttt.Any())
            //{
            //    ScriptManager.RegisterClientScriptBlock(this.up, this.GetType(), "export", "hdnExportExcel('"+str+"')", true);
            //}
        }
    }
    catch (Exception ex)
    {
        log4net.Config.XmlConfigurator.Configure();
        log.Warn("Logging:" + ex);

    }
    finally {
        if(dsResult != null)
        dsResult.Dispose();
    }
}

function hdnExportExcel() {
if (confirm('You are about to miss the tasks do you want to continue?')) {
    document.getElementById('ctl00_PagePlaceholder_btnhdnExport').click();
}
else {
    return false;
}}

私の問題は、document.getElementById('ctl00_PagePlaceholder_btnhdnExport')null になっていることです。しかし、ページのソースでは、要素 ID を次のように確認できます。ctl00_PagePlaceholder_btnhdnExport

なぜ機能しないのかわかりません。updatepanel の postbacktrigger が原因だと思います。外部更新パネルを配置してみbtnhdnExportて、トリガーオプションから削除しました。しかし、うまくいきませんでした。助言がありますか?

前もって感謝します

4

2 に答える 2

0

Ankurが言ったように、JavaScriptがロードされているとき(ページは動的に作成されています)、要素IDにアクセスできません。

変更することをお勧めします

document.getElementById('ctl00_PagePlaceholder_btnhdnExport')

document.getElementById('btnhdnExport')

于 2012-08-29T17:01:46.480 に答える
0

UpdatePanel が更新されると、そのコンテナ内のすべてが置き換えられ<div>ます。ボタンは、JS コードが呼び出されている時点では文字通り存在しません。これを回避する 1 つの方法は、.NET の PageRequestManager を使用して、UpdatePanel の処理が完了した後で JS コードを呼び出すことです。次のようなことを試してください:

function hdnExportExcel() {

  var prm = Sys.WebForms.PageRequestManager.getInstance();
  prm.add_pageLoaded(function() {

      if (confirm('You are about to miss the tasks do you want to continue?')) {
          document.getElementById('<%= btnhdnExport.ClientID %>').click();
      }
      else {
          return false;
      }
  }

}

ボタンの ID 値をハードコーディングしていないことにも気付くでしょう。.NET によって動的に生成される id 値をハード コーディングすることは避ける必要があります。これは、将来ページの構造が変更されたときに変更されるためです。ページの別の場所に関係のない変更を加えて、以前は安定していた機能が壊れていることをテストまたは後で発見するのは楽しいことではありません。

于 2012-08-29T17:55:47.820 に答える