[英]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").value
, tempInp
控件的ClientID可能會有所不同,因此它將無法找到該控件,並且再次出現相同的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.