CompositeScript - 无效的Viewstate错误

时间:2009-01-09 09:33:44

标签: asp.net scriptmanager

我正在使用ASP.NET 3.5 SP1中为ScriptManager提供的新CompositeScript功能。

当我使用ASP.NET开发服务器测试时,它工作正常,但是当我将网站发布到我的IIS网络服务器时,无法下载组合文件,我总是收到以下错误:无效的ViewState。

添加到ScripResourceHandler的查询字符串很长(导致??):

<script type="text/javascript" src="/ScriptResource.axd?d=8PM7kHuMMquT4Ta6cvC_2JLE_mKmYLeDWgV9z71Ryu5-7LRuy1v7MkEzM-M-NoE92QPDzXGBBSohhGbO17FKHqTZ9xMJx_5WaNrJTiwoFF28dlc6k02jRhN73u_Ohv7CKe-QPUdCOnzsBblNlopier7Ijd66Jp6Z0voAkZp36RzWYd64G9SOBCUs1HTu7oRQJTOlWyAd26O2r3S7Js7VX1YddtK-zO7DHa272a5-BitDkKTubnMPlwyYnW0Cn7TVK7NCjyF_o1E6wgPWY4THH56YNMtyRKeTrGFzMjTkiOmv18i2ePMHErlWYBXiL0If47bfPbNtfIeAMQAT8xX_DMBN6VR74GDlJSXQpFcGadNsKocZ4EOonDLykWf6Oq4ISr54_c-k_zzma5f6qFk1fXx8n8Vphe_QL67R-7aDlwBH9CrK-IBsuYDDeMSlTMWAZ6TRIhZSAyVANvh2VPZ8eBmGD0BpVA7D8e2vA1l6_kbC7w6CmGCEok-Cb1dqQPjgwB6Ho199M3IWrdwbUkN2leiDXn9bkZMGWA75IyjYiDisAz97JyA9AtDolhYGbxJ_AVrIpNpZFOQBZsXBkLfoo7iZmzHLwG7HNPhodtaekPAcxiKgi7Xf62DEnb20VRYMCFH8Qzfx5u4nlzZo4n7ZMkxDpWPlB65LCeCtvC6ZIl1kbq9FJ9dlf_DAkNU3-KKy__87Tzz9RWx6ucLXRGuljodLjiT8wrWRET_CpCspnHqpByBxEXiOi1_jW0e6_GjfZ9Fqk9GIXsSoTvnZmz_J68d28rSafQVKO1O06AjHCCBd7wh5mY-ISSLFaZ0pPszjdgVYxnC83ujaY9SWmRxUb_lPT4VdYG1Q02iyRO2l7BIDO-NiF77V_kklBhQRZ5ZiT3Vbf-JL6EZISThBJuh3WA2">

有没有人知道这个问题的解决方案?

2 个答案:

答案 0 :(得分:2)

我认为ScriptResource.axd的链接无效。

AFAIK,ScriptResource.axd上的查询字符串由两个参数(d和t)组成。 d参数是加密的字符串,其包括程序集,版本号(如果适用)和嵌入在所述程序集中的资源(即javascript文件)的名称。加密基于机器密钥。 t参数是程序集更新的日期(以刻度表示)。

如果您查看Reflector并查看System.Web程序集并查看UI.Page,则会有一个名为DecryptString的私有方法。我不是在Windows上的Windows,但是如果你向下看DecryptString,你会看到最终你会得到一个异常“无效的viewstate”。

有几种不同的方法可以进行复合脚本和脚本组合。但我认为任何ScriptManager控件(AjaxToolKit都没有)都没有真正得到这个。在实践中,我发现你总是在外面留下一些脚本。

要考虑的其他几个资源是:Omar Al Zabir在codeproject的帖子:http://www.codeproject.com/KB/aspnet/HttpCombine.aspxhttp://www.codeproject.com/KB/aspnet/fastload.aspx。奥马尔也有一本涵盖表现的好书。

同样在代码项目中,Moiz Dhanji的方法略有不同:http://www.codeproject.com/KB/aspnet/AspNetOptimizer.aspx.

答案 1 :(得分:2)

马丁所指出的奥马尔和莫里兹方法的另一种变体是克里斯蒂安在N2 CMS project中使用的另一种变体。

我们的想法是,不是在配置文件中描述每组脚本,而是为每个组创建一个虚拟子文件夹。根据请求,aLL特殊的HTTP处理程序必须做的是遍历请求的目录并处理在那里找到的aLL文件。