ASP.NET HTML输出中的所有内容是什么?

时间:2010-11-22 23:09:03

标签: asp.net html asp.net-mvc

请看这个:

VIEWSTATE “ID = ”_ VIEWSTATE“ 值=”/ wEPDwUKMTMzMTM1NTAzNA9kFgJmD2QWAgIDD2QWJgIDDw8WBB4LTmF2aWdhdGVVcmwFKGh0dHA6Ly93d3cubGVhcm5kZXZub3cuY29tL1Byb2R1Y3RzLmFzcHgeBFRleHQFCVN1YnNjcmliZWRkAgUPDxYCHwAFHWh0dHA6Ly9vbmxpbmUubGVhcm5kZXZub3cuY29tZGQCBw8PFgIfAAUnaHR0cDovL3d3dy5sZWFybmRldm5vdy5jb20vRGVmYXVsdC5hc3B4ZGQCCQ8PFgIfAAUoaHR0cDovL3d3dy5sZWFybmRldm5vdy5jb20vUHJvZHVjdHMuYXNweGRkAgsPDxYCHwAFJ2h0dHA6Ly93d3cubGVhcm5kZXZub3cuY29tL1NhbXBsZXMuYXNweGRkAg0PDxYCHwAFKWh0dHA6Ly93d3cubGVhcm5kZXZub3cuY29tL3N1YnNjcmliZS5hc3B4ZGQCDw8PFgIfAAUjaHR0cDovL3d3dy5sZWFybmRldm5vdy5jb20vRkFRLmFzcHhkZAIRDw8WAh8ABSxodHRwOi8v ........的(它的10倍,但我已经删除它)

ASP.NET生成的这个HTML吗? ASP.NET MVC也做同样的事情吗?

3 个答案:

答案 0 :(得分:8)

这称为ViewState

ASP.NET MVC不会生成ViewState。

答案 1 :(得分:3)

ASP.Net MVC不会产生viewstate,但这并不一定意味着它更快。

首先,如果你在ASP.Net webforms页面中有那么多的viewstate你可能做错了什么。在webforms中避免大型视图状态并不难。

其次,webforms放入视图状态的东西主要替代mvc页面需要在每个请求上重建的东西。这往往在公共互联网站点上有利于mvc,其中带宽比使用额外的服务器资源更昂贵和更慢。对于公司局域网上的专用Intranet,它倾向于支持从浏览器到Web服务器的上游带宽免费,丰富且快速的webforms。

答案 2 :(得分:1)

当您回发到服务器时,Web窗体使用viewstate来维护控件状态。例如,假设您在Web表单上有一个文本框和一个按钮。您在文本框中键入内容,然后单击按钮。该按钮执行回发到服务器的回发。当页面重新加载时,除非您自己在服务器端代码中清除了文本框,否则在单击按钮之前,文本框仍将包含任何类型的文本框。

实际发生的是文本框中的数据存储在隐藏的视图状态字段中,并在页面刷新时再次加载到文本框中。视图状态看起来像混乱,因为它是base64编码的。您也可以手动将内容存储在视图状态中。在页面的page_load事件中,只需执行以下操作:

this.ViewState["someVariable"] = "some value";

现在,如果您在空白网页表单上执行此操作,则在加载页面时,您将在html中看到一个与您粘贴的视图状态字段(除了小得多)。如果您复制了该隐藏字段中的值并将其粘贴到视图状态解码器(like this one)中,您会看到someVariable的值为“某个值”。

现在在表单上按一下按钮,然后点击按钮即可:

Response.Write(this.ViewState["someVariable"].ToString());

您将在页面上看到“某些值”。你所做的是在viewstate中手动存储一些东西,它被渲染到该隐藏字段中的页面,然后该隐藏字段被发回服务器并从中读取以显示数据。

这是网络表单的主要功能。 MVC不使用viewstate。 MVC依赖于另一种称为模型绑定的技术,这种技术超出了您的问题的范围。谷歌“asp.net mvc模型绑定”有关mvc维护帖子信息的方式的更多信息。

视频状态笑话的稍微偏离主题的示例:

我有一个名为U413的大型社区网站。我最近重新设计它使用ASP.net MVC 2.0。这是一个程序员社区,他们一直都在使用webforms。那么现在它不使用webforms我决定对它们开个玩笑。 MVC不使用viewstate,但我进入了一个webform并生成了一个包含一些数据的viewstate,并将隐藏的字段手动粘贴到我的MVC应用程序的视图中。

<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwULLTE2MTY2ODcyMjkPFgIeE1U0MTNTZWNyZXRBY2Nlc3NLZXkFM2h0dHA6Ly93d3cudTQxMy5jb20vQ29udGVudC9VNDEzU2VjcmV0QWNjZXNzS2V5LmpwZ2RkpshYUvbSiUuE0YaYNBH0rvTGj4qEcquSqQeUs9ZpuIQ=" />

已经有几个人窥探html源代码,希望找到一些秘密或漏洞并遇到这个问题。他们立刻解码了,笑得很开心。如果要查看,请复制该值并将其粘贴到我之前链接的解码器中。