是的,我发现很多问题引用了这个,但我似乎无法找到像我一样的确切场景。所以请花些时间查看下面的代码:
我在内容持有人
中有此脚本 <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);
}
希望你能帮助我谢谢!
答案 0 :(得分:1)
我能想到一个解决方法:
的 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,然后将其粘贴到document.getElementById("<% =txtMACAdd.ClientID %>").value
。
因为当我们执行document.getElementById("tempInp").value
时,tempInp
控件的ClientID可能会有所不同,并且无法找到控件并再次出现同样的问题。