asp.net 中怎么乱码那么多呢?怎么解决好?

这是在IE中查看的源文件的一部份: <form name="quicksearch" method="post" action="index.aspx" language="javascript" onsubmit="javascript:return WebForm_OnSubmit();" id="quicksearch"><input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" ⼀><input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" ⼀><input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="⼀TA4MjUuaHRtbCfmrabmsYnmgbrmganmlq⼀mlofljJblj5HlsZXmnInpmZDlhazlj7hkAgMPDxYCHwIF9gE8YSBocmVmPUh0bWwvSm9iRGV0YWlsLzEzMTE2Lmh0bWwgY2xhc3M9b3JhbmdlMjEgdGFyZ2V0PV9ibGFuaz7kv53lrok8L2E++h5oGv5oqA5pyv5pyJ6ZmQ5YWs5Y+4ZAIDDw8WAh8CBb4BPGEgaHJlZj1IdG1sL0pvYkRldGFpbC8xMzE0MC5odG1sIGNsYXNzPW9yYW5nZTIxIHRhcmdldD1fYmxhbms+5bWM5YWl5byP6L2v5Lu256CU5Y+⼀UGVyaWQ9MTAwOTImUmVzaWQ9MTAxMzAHTjAxMDA5MjBSZXN1bWUvQnJvd3NlL0luZGV4LmFzcHg⼀⼀UGVyaWQ9MTAwOTQmUmVzaWQ9MTAxMzcHTjAxMDA5NDBSZXN1bWUvQnJvd3NlL0luZGV4LmFzcHg⼀+OA==" ⼀>
2026年09月26日 18:43
有4个网友回答
网友(1):

在asp时代, 大家都知道一个html控件的值,比如input 控件值,当我们把表单提交到服务器后, 页面再刷新回来的时候, input里面的数据已经被清空. 这是因为web的无状态性导致的, 服务端每次把html输出到客户端后就不再于客户端有联系.

asp.net巧妙的改变了这一点. 当我们在写一个asp.net表单时, 一旦标明了 form runat=server ,那么,asp.net就会自动在输出时给页面添加一个隐藏域



那么,有了这个隐藏域,页面里其他所有的控件的状态,包括页面本身的一些状态都会保存到这个控件值里面. 每次页面提交时一起提交到后台,asp.net对其中的值进行解码,然后输出时再根据这个值来恢复各个控件的状态. 我们再看这个控件的value值,它可能类似如下的形式:Oz4+O2w8aTwxPjs+O2w8....
很多人会认为这是加密的信息,其实不是, ms仅仅是给各个控件和页面的状态存入适当的对象里面,然后把该对象序列化, 最后再做一次base64编码,直接赋值给viewstate控件.

说到这,想必你一定想看看这个viewstate里面到底存了哪些东西, 嗯,你是可以写一个base64 to string的转换代码来实现.不过,viewstate是有层次之分的,普通的转换后,你看到的也是很乱的文字. 这里提供了一个专门转换viewstate值的地方 http://www.wilsondotnet.com/Demos/ViewState.aspx . 你可以去将自己的viewstate输入进去,让它给你转化一下,这可是带结构的哦

好, 以上说的这些你可能会觉得: 这与session有什么关系? 这个viewstate不是由asp.net自动去维护吗? 是的, 如果仅仅是保存控件的状态, 你可以感觉不到它与session有什么瓜葛( 呵呵,其实它们就没有瓜葛),不过,接下来,我们看看这种使用方法: 在后台aspx.cs代码里:

private void Page_Load(object sender, System.EventArgs e)
{
ViewState["myvalue"] = "viewstatevalue";
//.....
}

呵呵, 可以在页面后台直接给viewstate集合赋值, 现在你是不是觉得和session的使用方法差不多了呢? 对,这一点就是几乎所有初学asp.net的人的疑惑. 会认为asp.net也像session那样把这个值保存到服务器内存里面, 其实不是!

那么,这里的viewstate值是属于谁?又存在哪里? 其实,它和上面的其他控件的状态保存一样,也是存储到那个隐藏的viewstate控件值里面, 上面已经说了, viewstate用来保存状态,包括页面本身, 那么,这里的viewstate就属于页面本身的状态.

网友(2):

这是你用ASP.NET控件自动生成的,无法去除

如果你想代码整洁,尽量使用Html标签

网友(3):

哥。那个不是乱码,那个是ASP生成的时候自动生成的HTML代码,这个不会影响你的页面的

网友(4):

那不是乱码。。。那是加密