簡體   English   中英

將Gridview導出到Excel中時出錯

[英]Error in Exporting Gridview to Excel

是的,我發現很多與此有關的問題,但我似乎找不到像我一樣的確切情況。 因此,請花一些時間在下面查看我的代碼:

我在內容占位符中包含此腳本

   <script language="javascript" type="text/javascript">
        function GetMac2() {

            var macAddress = "";
            var ipAddress = "";
            var computerName = "";
            var wmi = GetObject("winmgmts:{impersonationLevel=impersonate}");
            e = new Enumerator(wmi.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True"));
            for (; !e.atEnd(); e.moveNext()) {
                var s = e.item();
                macAddress = s.MACAddress;
            }

            document.getElementById("<% =txtMACAdd.ClientID %>").value = unescape(macAddress);
        }  </script>

和用於將Gridview導出到excel的代碼

HtmlForm form = new HtmlForm();
            Response.Clear();
            Response.Buffer = true;
            string fileName = "Prenda of " + YearDropDownList.SelectedValue + "/" + MonthDropDownList.SelectedValue;
            Response.AddHeader("content-disposition", "attachment;filename=" + fileName);
            Response.Charset = "";
            Response.ContentType = "application/vnd.ms-excel";
            StringWriter sw = new StringWriter();
            HtmlTextWriter hw = new HtmlTextWriter(sw);
            PrendaGridView.AllowPaging = false;
            PrendaGridView.DataSource = (DataSet)ViewState["view"];
            PrendaGridView.DataBind();
            form.Controls.Add(PrendaGridView);
            this.Controls.Add(form);
            form.RenderControl(hw);
            Response.Output.Write(sw.ToString());
            Response.Flush();
            Response.End();

問題是我收到錯誤

The Controls collection cannot be modified because the control contains code blocks (i.e. <% ... %>).

當我包括上面的JavaScript時,如果我將其刪除。 它運作良好。 所以有沒有關於如何包含我的JavaScript的解決方法?

我像這樣在page_load上調用我的Java腳本

if(!isPostback)
{
   string jvscript = "<script language='javascript'>GetMac2();</script>";
                    Page.ClientScript.RegisterStartupScript(this.GetType(), "invoke", jvscript);
}  

希望你能幫我謝謝!

我可以想到一種解決方法:
HTML:

<input id="tempInp" runat="server" type="hidden"></input>

C#:

tempInp.value = txtMACAdd.ClientID;

使用Javascript:

document.getElementById(document.getElementById("tempInp").value).value = unescape(macAddress);

這不會干擾javascript,並且javascript中沒有服務器標記,因此您可以執行此操作this.Controls.Add(form);

編輯:
由於您使用服務器標記來獲取控件的客戶端ID,因此我認為控件的客戶端ID和服務器ID不相同。
還有另一種非標准但簡單的解決方法。 只需從瀏覽器的頁面最終源復制txtMACAdd的客戶端ID, txtMACAdd將其粘貼到document.getElementById("<% =txtMACAdd.ClientID %>").value
因為當我們執行document.getElementById("tempInp").valuetempInp控件的ClientID可能會有所不同,因此它將無法找到該控件,並且再次出現相同的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM