我继承了一个ASP.NET应用程序,用于构建具有大量viewstate值的页面。正如我一直在研究它,我假设我能够使用Firebug检查输出并在生成的客户端脚本中设置断点。
我发现的是,只要Firebug遇到大型视图状态,它就会在渲染“脚本”选项卡时完全窒息,从而几乎无法设置和使用断点。
我在输出中看到的内容与此非常相似:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD> --snipped-- </HEAD>
<body>
<form name="..." method="post" action="..." id="...">
<input
type="hidden"
name="__VIEWSTATE"
id="__VIEWSTATE"
value="/V4dAUdVmVyc2lvbiAzLjAsIGJ1aWxkIDMxIChlbi1VUylkAgUPFgIfAGVkAgsPDxYCHwAFC1RpbSBCb29ybWFuZGQCDw8QDxYCHgtfIURhdGFC
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD> --snipped-- </HEAD>
<body>
<form name="..." method="post" action="..." id="...">
<input
type="hidden"
name="__VIEWSTATE"
id="__VIEWSTATE"
value="/V4dAUdVmVyc2lvbiAzLjAsIGJ1aWxkIDMxIChlbi1VUylkAgUPFgIfAGVkAgsPDxYCHwAFC1RpbSBCb29ybWFuZGQCDw8QDxYCHgtfIURhdGFC
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD> --snipped-- </HEAD>
<body>
<form name="..." method="post" action="..." id="...">
<input
type="hidden"
name="__VIEWSTATE"
id="__VIEWSTATE"
value="/V4dAUdVmVyc2lvbiAzLjAsIGJ1aWxkIDMxIChlbi1VUylkAgUPFgIfAGVkAgsPDxYCHwAFC1RpbSBCb29ybWFuZGQCDw8QDxYCHgtfIURhdGFC
换句话说,Firebug获取viewstate值的一半,然后从顶部开始,将所有内容从DOCTYPE声明呈现到viewstate中的相同位置。
虽然我认识到(并且正在研究)这个应用程序使用viewstate的方式存在问题,但我很惊讶Firebug对输出的处理。我有Firefox和Firebug的最新版本。是否有可以更改的设置以使脚本选项卡正确呈现?有没有其他人遇到过Firebug和ASP.NET viewstate的问题?
答案 0 :(得分:0)
您是否尝试过其他任何JavaScript调试工具?
我知道Chrome和Safari内置了脚本调试程序,或者有Venkman FireFox插件。
答案 1 :(得分:0)
虽然它没有解决基础ViewState问题,但我在特定页面中实现了以下解决方法,我需要使用Firebug。请注意,我不建议将SessionPageStatePersister
作为最终解决方案(将这个巨大的视图状态存储在服务器上只能解决问题)但我想我会分享允许我继续前进的解决方法。
#if DEBUG
// When debugging, it is useful to not have the large viewstate values
// output to the browser.
protected override System.Web.UI.PageStatePersister PageStatePersister
{
get
{
return new SessionPageStatePersister(this);
}
}
#endif
这可确保我在调试时只关注我关注的输出到浏览器,但也不会更改当前的生产视图状态行为。