1、直接用Response.Write()方法来输出alert或者其他的js代码时会影响到部分页面样式
因为Response.Write方法把<script>标签输出到了<DOCTYPE>标签之前,导致了<DOCTYPE>标签被忽略掉了,于是浏览器就把页面当成一堆大杂烩的标签(tag soup)而不是一个有效的HTML文档来解释了,页面的渲染模式变成了怪异模式(Quirks Mode)而不是标准的兼容模式(Standards Compliance Mode),这样就影响了HTML和CSS的解释,因为浏览器试图去模仿他的一个比较的版本,会产生许多怪异和错误。而且他还会给元素使用不同的默认样式,这些原因就导致了最终的样式问题。
这里面有句话很重要,就是:<DOCTYPE>标签前的任何东西都会导致<DOCTYPE>标签被忽略掉。
方法一:把Response.Write()语句替换为这个
Page.RegisterStartupScript("ServiceManHistoryButtonClick", "<script>window.open('EquipmentHistory.aspx?eid=" + ServiceManDropDownList.SelectedValue + "');</script>");
这个方法用于在页响应中发出客户端脚本块,前一个参数是该Script在页面中的唯一名称(随便起,不重复就行),后一个是脚本内容。
这个方法应该是微软官方推荐的方法。
方法二:在原程序的Response.Write()语句后再加一句
Response.Write("<script>document.location=document.location;</script>");
Page.RegisterStartupScript("ServiceManHistoryButtonClick", "<script>window.open('EquipmentHistory.aspx?eid=" + ServiceManDropDownList.SelectedValue + "');</script>");
这个方法用于在页响应中发出客户端脚本块,前一个参数是该Script在页面中的唯一名称(随便起,不重复就行),后一个是脚本内容。
这个方法应该是微软官方推荐的方法。
方法二:在原程序的Response.Write()语句后再加一句
Response.Write("<script>document.location=document.location;</script>");
2、在ASP.NET中应用微软AJAX技术,把GridView在UpdatePanel里导出Excel时会出现的错误。
解决方法:
<asp:ScriptManager ID="ScriptManager1" runat="server" EnableScriptGlobalization="True" EnableScriptLocalization="True"></asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<br/>
您自己的HTML代码...
<asp:GridView ID="GridView1" runat="server">
</asp:GridView>
<asp:LinkButton ID="lbtnExport2Excel" runat="server" OnClick="lbtnExport2Excel_Click">导出Excel</asp:LinkButton>
</ContentTemplate>
<Triggers>
<asp:PostBackTrigger ControlID="lbtnExport2Excel" />
</Triggers>
</asp:UpdatePanel>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<br/>
您自己的HTML代码...
<asp:GridView ID="GridView1" runat="server">
</asp:GridView>
<asp:LinkButton ID="lbtnExport2Excel" runat="server" OnClick="lbtnExport2Excel_Click">导出Excel</asp:LinkButton>
</ContentTemplate>
<Triggers>
<asp:PostBackTrigger ControlID="lbtnExport2Excel" />
</Triggers>
</asp:UpdatePanel>
3、GridView导出Excel时重写VerifyRenderingInServerForm方法
只要在发生异常,代码的调度直接进入catch块中,那么我们自定义的输出代码就不会执行context.Response.Write(sw.ToString()),系统转而把整个页面都输出来了,所有我们就会看到不需要的一些控件也被导出来了。