当我通过VS向导迁移解决方案时,我没有任何错误.
错误是没有服务器控制事件工作,并且viewstate始终为空.
我已经尝试明确地将ViewStateMode设置为Enabled,AutoEventWireup设置为true.不幸的是没有任何效果.该项目不是作为Web应用程序编写的(转换不能解决问题).
我也检查是否所有的服务器控件hav ID设置(他们做).
该项目有自己的母版页系统,而在System.Web.UI.Page上有一个很厚的层,可能会打破很多东西,但到目前为止我还没有找到麻烦的根源.
有什么特别的设置,我应该检查(即默认值从.NET 1.1更改),或者你能给我一些提示,为什么会发生这种情况?
编辑1:这些是当点击一个LinkButton时发布的值:
CRC = -2134936892&安培; _EVENTTARGET = M页面$$BC&TestButton放大器; _EVENTARGUMENT =安培; _VIEWSTATE =安培; _EVENTVALIDATION = / wEWAwL + raDpAgLB49K8AwKy8rFAt4Axk3NlUEWxrtY / RtaexH / 634CkJe6G9Im5EOPXtVw =
编辑2:我仔细检查了自定义母版页机制,发现在跳转到正确的页面之前,它广泛使用了Server.Transfer(…)方法.这是缺少ViewState的可能原因吗? (那么EventTarget总是会持续存在就会很奇怪)更重要的是,1.1和4.0之间是否有变化?
解决方法
在页面中更深入地说,当FORM的动作为空时,会发生以下情况:
>将.aspx页面发送到表单元素的action属性设置为“”的浏览器.
>表单发回ASP.NET.
>托管HTTP模块读取实体主体的某些部分.例如,一个模块读取Request.Form或Request.Params.这会导致POST请求的实体正文被读入托管内存.因此,实体主体不再可用于在IIS 7或IIS 7.5集成模式下运行的任何本机代码模块.
> IIS DefaultDocumentModule对象最终运行并创建对Default.aspx文档的子请求.然而,由于实体主体已经被托管代码读取,所以没有可用于发送给子请求的实体主体.
>当HTTP流水线为子请求运行时,.aspx文件的处理程序在处理程序执行阶段运行.
>因为没有实体体,没有表单变量,没有视图状态,因此没有可用的.aspx页面处理程序的信息来确定应该引发什么事件(如果有的话).因此,没有运行受影响的.aspx页面的回发事件处理程序.
您可以通过以下方式解决此问题:
编辑:我们在两年前迁移到3.5时,遇到类似的问题,我们所做的是将VS2005与Web App项目类型作为桥梁,因此我们的迁移路径是:
> 1.1〜2.0
> 2.0〜3.5
这是我们最后的手段,那就是在找出这个文件之前.