asp.net – Viewstate压缩问题
我目前正在与.NET Viewstate斗争,它开始让我失望.我们发现其中一个应用程序中的某些页面由大约80%的viewstate组成,我已经考虑尽可能地减少这一点.
我已经看过(并且很满意)禁用viewstate以获取不需要它的控件(标签,按钮等)并在这里取得了一些小的收益. 我现在正在查看视图状态压缩,虽然我可以证明大小减少了40-50%,但它似乎并不适合我的应用程序. 场景: 现在的问题是:启用Viewstate压缩后,如果用户在单击“确定”按钮之前更改了DDL中的选定项目,则会收到“必填字段验证程序”错误,指示尚未在其中一个DDL中进行选择 – 但是事实并非如此!禁用压缩代码可以解决问题,并且页面按预期运行(即,它已经持续数月!). 问题可能归结为现在存储在__VIEWSTATE以外的密钥中的视图状态[我见过的代码使用了不同的密钥名称 – 例如VSTATE). 我的页面来源看起来像这样; 带压缩的页面源(请注意空的__VIEWSTATE键): <div> <input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" /> <input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" /> <input type="hidden" name="__LASTFOCUS" id="__LASTFOCUS" value="" /> <input type="hidden" name="__VSTATE" id="__VSTATE" value="H4sIAAAAAEAO29B2AcSZYlJ . . MKd2afqdaImFR5UiFXVyQPwLPA//8xt+pMsSQ8vlOklcoNgmZfJd8hHvk6/S/7UbxxAJTjzZfp6Qcm039 h3d3dvvPO7/Oa/7i57uemj1H2a/gw5lJQ+ySjFRtPZUL7A/3o2ImFR5UiFXVyLPA+38At70F1EkwAAA=" /> <input type="hidden" name="__VIEWSTATE" id=" __VIEWSTATE" value="" /> </div> 没有压缩的页面源: <div> <input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" /> <input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" /> <input type="hidden" name="__LASTFOCUS" id="__LASTFOCUS" value="" /> <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTYxOTM1NDg4N A9kFgJmD2QWAgIDD2QWAgIFD2QWAmYPZBYKAgEPZBYIAgcPZBYCAgMPDxYCHgRUZXh0BRdEYXduQyBbY2hhbm dlIHBhc3N3b3JkXWRkAgkPFgIeB1Zpc2libGVoFgQCAQ8PFgIfAAUFQWRtaW5kZAIDDw8WAh8ABQUxNDoyNGR . . . . . . kAgsPDxYEHwAFWVNlbGVjdGVkIFNlcnZpY2UgVXNlcjogPGEgY2xhc3M9J3N1U2VsZWN0b3InIGhyZWY9J2xp c3RzZXJ2aWNldXNlcnMuYXNweCc+PGI+bm9uZTwvYj48L2E+HwFoZGQCDw8QZGQWAGQCBQ8UKwADZDwrABQEA BYSHg9QYXJlbnRJdGVtQ2xhc3MFC2lnbW5fUGFyZW50HhdUb3BMZXZlbFBhcmVudEl0ZW1DbGFzcwUTaWdtbl Ub3BFBhcmVudB4KSlNGaWxlTmFtZWUeFlRvcExldmVsSG92ZXJJdGVtQ2xhc3MFNGlnbW5fVG9wTGV" /> </div> .NET如何知道VIEWSTATE的存储位置,是否知道我已经移动了它? 除了实现SavePageStateToPersistenceMedium和LoadPageStateFromPersistenceMedium之外,我是否需要对我的代码进行任何其他更改? 解决方法
嘿viewstate压缩对我没有任何问题.基本上我有一个使用viewstate的所有aspx页面的基类.即使我使用不同的viewstate键来保存我的viewstate.但是你必须为此重写2个方法:
1) – 保存视图状态 只要你这样做,你应该没有问题.看下面我用于我的基类的代码 using System; using System.IO; using System.Web.UI; namespace XC.UI.WebForms { public class PageBase : System.Web.UI.Page { protected override object LoadPageStateFromPersistenceMedium() { string viewState = Request.Form["__VSTATE"]; byte[] bytes = Convert.FromBase64String(viewState); bytes = XC.Common.ViewStateHelper.Decompress(bytes); LosFormatter formatter = new LosFormatter(); return formatter.Deserialize(Convert.ToBase64String(bytes)); } protected override void SavePageStateToPersistenceMedium(object viewState) { LosFormatter formatter = new LosFormatter(); StringWriter writer = new StringWriter(); formatter.Serialize(writer,viewState); string viewStateString = writer.ToString(); byte[] bytes = Convert.FromBase64String(viewStateString); bytes = XC.Common.ViewStateHelper.Compress(bytes); ClientScript.RegisterHiddenField("__VSTATE",Convert.ToBase64String(bytes)); } } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- C#使用Linq to csv读取.csv文件数据
- 如何使用ASP.NET C#设置html输入类型文本值?
- asp.net-mvc – ASP.NET MVC框架中的MVVM和ModelBinders
- 关于asp.net core数据安全的思考
- 使用IServiceProvider获取会话服务
- ASP.NET身份验证cookie仅在IE中消失,仅在特定位置消失
- asp.net-mvc – 为什么不能通过HtmlHelper呈现所有表单控件
- asp.net core 2.0 spa角谷歌地图
- ASP.NET Web API项目自动生成接口文档和测试页面
- ASP.NET Web API项目自定义接口路由和HTTP请求方式