ASP.NET 1.1到4.0迁移:事件不起作用

时间:2012-08-03 09:19:32

标签: asp.net .net migration asp.net-4.0 asp.net-1.1

我最近开始将ASP.NET项目从.NET 1.1版迁移到4.0版。该系统目前在客户现场运行并正常运行。 当我通过VS向导迁移解决方案时,我没有收到任何错误。 错误是没有服务器控件事件视图状态始终为空

我已尝试将ViewStateMode明确设为已启用,AutoEventWireup为真。但遗憾的是无效。该项目不是作为Web应用程序编写的(转换不能解决问题)。

我还检查是否所有服务器控件都设置了(他们这样做)。

该项目有自己的母版页系统,System.Web.UI.Page上有一个厚层可能会破坏很多东西,但到目前为止我还没有找到麻烦的来源。 / p>

我是否应该检查任何特定设置(即自.NET 1.1以来默认值已更改),或者您能给我一些提示,为什么会发生这种情况?

编辑1:这些是点击LinkBut​​ton时发布的值:

CRC = - 2134936892&安培;的 _ EVENTTARGET = M页面%24BC%24TestButton&安培;的 _EVENTARGUMENT =&安培;的 _ VIEWSTATE =&安培;的 _EVENTVALIDATION =%2FwEWAwL%2BraDpAgLB49K8AwKy8rFAt4Axk3NlUEWxrtY%2FRtaexH%2F634CkJe6G9Im5EOPXtVw%3D

编辑2:我仔细研究了自定义母版页机制,发现它在跳转到右页之前大量使用了Server.Transfer(...)方法。这是缺少ViewState的可能原因吗? (那么EventTarget总是保持不变会很奇怪)更重要的是,1.1和4.0之间是否会有任何变化?

3 个答案:

答案 0 :(得分:4)

你看过这个链接了吗? http://www.asp.net/whitepapers/aspnet4/breaking-changes

在页面深处声明,当FORM的操作为空时,会发生以下情况:

  1. 将.aspx页面发送到浏览器,表单元素的action属性设置为“”。
  2. 表单将发布回ASP.NET。
  3. 托管HTTP模块读取实体主体的某些部分。例如,模块读取Request.Form或Request.Params。这会导致POST请求的实体主体被读入托管内存。因此,实体主体不再可用于在IIS 7或IIS 7.5集成模式下运行的任何本机代码模块。
  4. IIS DefaultDocumentModule对象最终运行并创建对Default.aspx文档的子请求。但是,由于实体主体已被一段托管代码读取,因此没有可用于发送给子请求的实体主体。
  5. 当HTTP管道为子请求运行时,.aspx文件的处理程序在处理程序执行阶段运行。
  6. 因为没有实体主体,所以没有表单变量且没有视图状态,因此.aspx页面处理程序没有可用的信息来确定应该是什么事件(如果有的话)被提高。因此,没有受影响的.aspx页面的回发事件处理程序运行。 您可以通过以下方式解决此问题:
  7. 编辑:我们在两年前迁移到3.5时运行类似的问题......我们所做的是使用VS2005和Web App项目类型作为桥梁,所以我们的迁移路径是:

    • 1.1至2.0
    • 2.0至3.5

    这是我们最后的手段,那是在找到这份文件之前。

答案 1 :(得分:1)

这可能会或可能不会解决问题,但如果您在堆栈Why is the form action attribute empty on production server?上查看此帖子,它会讨论ASP.NET 3.5 sp1中引入的重大更改,该更改以表单的action属性为中心 - 它可能是一个开始的地方!

过去我必须做类似的事情,这可能是一个艰苦的过程,尤其是当你拥有“自定义母版页”功能时(我必须这样做)。我选择了一个非常基本的页面 - 我们有一个BasePage,它由一个CustomPage继承,它可以由AdminBasePage继续,然后是Admin页面等。如果你选择一个相对简单的页面并在早期设置一个断点。页面构造的过程尽可能,然后只是F10一直到它呈现它可以显示事情被调用两次(在我们的情况下这发生了很多,并且是值被覆盖的一些问题的原因等)。

为了回应您的server.transfer问题“编辑2”,我找到了这个资源http://www.codeproject.com/Tips/74472/ViewState-and-Server-Transfer-Best-practices,它解释了如何确保(希望)viewstate和server.transfer继续协调工作。我每天都会不断回答这个问题 - 请记下更多关于你如何上场的更新。你有最深切的同情!

答案 2 :(得分:1)

迁移完成后,

如果是网络应用程序:

这是一份清单:

  1. 尝试在设计模式下更改.NET服务器控件的值 Visual Studio 2010.(从它的框架4.0开始,您将使用它 视觉工作室2010)改变它包括:改变一个大小 服务器控件或任何其他属性。这将迫使 设计师生成服务器端设计器代码。

  2. 确保清理解决方案并重建它。我曾经有类似的问题,他们过去常常在设计师改变设计后修复,偶尔会给出 错误。它在迁移期间没有出错。

  3. 保存表单并进行测试。

  4. 在Firefox中使用Firebug检查是否有 加载网页时出现javascript脚本错误。

    希望这会有所帮助。