asp.net生成静态后冗余代码,去掉viewstate生成的代码
关于ASP页面中的ViewState垃圾信息问题
每次看到编译后的ASP页面源代码,里面充斥着大量的乱七八糟的东西,其中不乏像"__VIEWSTATE"这样的隐藏输入字段,总是让人看了不舒服。尤其是当这些代码影响到SEO时,我们不得不采取行动来清理这些冗余的代码。
以博客园为例,其首页源代码中并没有这些令人头疼的玩意儿。出于好奇,我查询了老外的解决办法,尝试将代码移动到尾部,但部分网页出现了报错。后来发现将网页的enableviewstate设置为false,能显著减少viewstate代码。这是一个值得考虑的解决方案,但在实际操作中需要注意可能出现的网页功能问题。毕竟,viewstate的存在是为了保存控件状态,盲目禁用可能会导致一些意想不到的问题。
在你的页面代码中加入如下函数:
```csharp
protected override void Render(HtmlTextWriter writer)
{
System.IO.StringWriter html = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter tw = new System.Web.UI.HtmlTextWriter(html);
base.Render(tw);
string Temp = html.ToString();
string s1 = string.Empty, s2 = string.Empty;
int i = 0;
i = Temp.IndexOf("
", "");Temp = Temp.Replace("\r", "");
tw.Close();
Response.Write(Temp);
}
private string RemoveViewStateCode(string input)
{
int i = input.IndexOf("
if (i > 0)
{
string prefix = input.Substring(0, i);
string suffix = RemoveUntilNextTag(input, i);
return prefix + RemoveViewStateCode(suffix);
}
else
{
return input;
}
}
private string RemoveUntilNextTag(string input, int start)
{
//... 这里实现移除至下一个标签的代码逻辑 ...
}
```
原因分析
许多服务器控件在ASP.NET中默认记录控件视图状态,这可能导致一些不必要的操作和资源消耗。如果你确定某个控件不需要记录其状态,你可以通过设置其EnableViewState属性为false来禁用这一功能。
个人观点
关闭视图状态并不是最终的解决方案,它只能减少问题,而并不能完全消除。从某种程度上来说,将form表单制作成普通的HTML标签是一种更为彻底的方法。通过去掉runat="server"属性,我们可以避免一些不必要的服务器控件的使用。虽然程序的核心功能很重要,但如果最终呈现的效果不佳,那么这个程序就没有太大的意义。
网友们的看法
关于视图状态,这是一个非常重要的功能,而不是无用的代码。当使用服务器控件时,为什么每次提交后都能通过控件对象读取到信息呢?答案就在于视图状态。视图状态是可以被禁用的,但仅仅设置EnableViewState为false并不够彻底。你会发现页面中仍然会有一个名为__VIEWSTATE的隐藏域存在。这是因为即便禁用了视图状态功能,仍会有一个服务器控件在运行,那就是表单的runat="server"。只有将表单编程转换为普通的HTML标签,页面才能真正变得纯净。禁用视图状态确实可以提升系统效率,因为程序不再需要视图状态中的值并为控件对象进行初始化。对于网站来说,这样做是非常高效的,但如果是在开发需要保持状态的引用程序时,禁用视图状态可能会带来一些麻烦。
我们需要根据实际情况来权衡是否禁用视图状态。在开发过程中,理解并合理利用这些功能可以帮助我们创建更高效、更优质的网站和应用程序。我们也需要注意保持代码清晰和简洁,以便更好地维护和管理我们的项目。Cambrian的渲染系统继续流畅地展示着这一切的内容与力量。这不仅仅是代码层面的变革,更是我们对未来的追求与向往的体现。
编程语言
- asp.net生成静态后冗余代码,去掉viewstate生成的代码
- vuejs2.0运用原生js实现简单的拖拽元素功能示例
- php输出图像的方法实例分析
- jquery.cookie.js实现用户登录保存密码功能的方法
- JS克隆,属性,数组,对象,函数实例分析
- Windows下Visual Studio 2017安装配置方法图文教程
- js实现跨域的方法实例详解
- 点评js异步加载的4种方式
- asp.net音频转换之.amr转.mp3(利用七牛转换法)
- Javascript中数组去重与拍平的方法示例
- .NET中函数Main的使用技巧
- Ajax 超时检查脚本
- Mysql5.7.17 winx64.zip解压缩版安装配置图文教程
- php实现自定义中奖项数和概率的抽奖函数示例
- Nuxt.js踩坑总结分享
- 原生js配合cookie制作保存路径的拖拽