2012-08-03 54 views
14

我最近開始將.NET項目從.NET 1.1遷移到4.0。該系統目前運行在客戶現場並運行。 當我通過VS嚮導遷移解決方案時,我沒有收到任何錯誤。 錯誤是沒有服務器控制事件工作視圖狀態總是爲空ASP.NET 1.1到4.0遷移:事件不起作用

我試過明確設置ViewStateMode已啓用並AutoEventWireup到true.Unfortunately沒有什麼作品。該項目不是作爲Web應用程序編寫的(轉換不能解決問題)。

我也檢查是否所有的服務器控件hav ID設置(他們這樣做)。

該項目有自己的母版頁系統,System.Web.UI.Page上有一個很厚的層,可能會破壞很多東西,但到目前爲止,我一直無法找到問題的根源。

是否有我應該檢查的任何特定設置(即默認值從.NET 1.1開始更改)還是可以給我一些提示,以便爲什麼會發生這種情況?

編輯1:這指的是轉移一個LinkBut​​ton點擊時發佈的值:

CRC = -2134936892 & _ EVENTTARGET = M頁面%24BC%24TestButton & _EVENTARGUMENT = & _ VIEWSTATE = & _EVENTVALIDATION =%2FwEWAwL%2BraDpAgLB49K8A wKy8rFAt4Axk3NlUEWxrtY%2FRtaexH%2F634CkJe6G9Im5EOPXtVw%3D

編輯2:我已經仔細地檢查自定義母版頁機制,我發現它使用了大量Server.Transfer(...)方法跳轉到正確的頁面之前。這是缺少ViewState的可能原因嗎? (那麼EventTarget總是被持久化會很奇怪)更重要的是,1.1和4.0之間是否會有變化?

+0

ViewState真的是空的,或者你只是不明白它在服務器端?即它是與頁面呈現?一旦執行操作,您能向我們展示Fiddler登錄到服務器的日誌嗎? – 2012-08-06 07:47:03

+0

我已將信息添加到我的原始問題中。 – 2012-08-06 08:14:07

+0

TestButton是否動態添加到頁面?您是否在升級的項目中引入了UpdatePanel?如果你在新項目中引入了UpdatePanel,這可能是問題所在。 ViewState在客戶端也是空的。它至少應該呈現。 – 2012-08-06 08:25:32

回答

1

這可能會也可能不會解決問題,但如果您在堆棧Why is the form action attribute empty on production server?上查看此帖子,它將討論在以表單的action屬性爲中心的ASP.NET 3.5 sp1中引入的重大更改 - 它可能是一個地方開始!

我不得不做類似的事情在過去,它可以是一個艱苦的過程尤其是當你有「定製母版」功能(我不得不這樣做)。我會選擇一個非常基本的頁面 - 我們有一個BasePage,它被一個CustomPage頁面所遺留,這個頁面可以被AdminBasePage和Admin頁面等繼承。如果你選擇一個相對簡單的頁面,並且儘早設置一箇中斷點過程儘可能的頁面構建,然後只是F10,直到它呈現它可能顯示事情被稱爲兩次的地方(在我們的例子中發生了很多事情,並導致一些值被overwrriteen等問題的原因)。

迴應你的server.transfer問題「編輯2」,我發現這個資源http://www.codeproject.com/Tips/74472/ViewState-and-Server-Transfer-Best-practices,它解釋瞭如何確保(希望)viewstate和server.transfer繼續協調工作。我每天都會回到這個問題 - 做更多的更新以瞭解你的進展情況。你有我最深切的同情!

1

一旦遷移完成後,

如果它是一個Web應用程序:

這裏有一個清單:

  1. 嘗試在 改變設計模式.NET服務器控件的值Visual Studio 2010.(自框架4.0開始,您將使用 visual studio 2010)更改它包括:更改服務器控件的大小或任何其他屬性。這將迫使 設計器生成服務器端設計器代碼。

  2. 確保您清理解決方案並重建它。我曾經有類似的問題,並且在改變設計師的設計之後,他們習慣於修復,偶爾會給出 錯誤。它在遷移過程中沒有發生錯誤。

  3. 保存表單並對其進行測試。

  4. 使用Firefox中的Firebug進行檢查加載網頁時是否存在任何 javascript腳本錯誤。

    希望這會有所幫助。

+0

正如我在我的問題中所述,它不是一個Web應用程序。 – 2012-08-06 07:39:58

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頁面的回發事件處理程序都不會運行。 可以解決此問題在以下幾個方面:

編輯:我們在類似的問題上運行兩年前遷移到3.5的時候......而我們所做的是使用與Web App的項目類型爲VS2005所以我們的遷移路徑是:

  • 1.1至2。0
  • 2.0至3.5

這是我們的最後一招,那就是找出這個文件之前。

+0

我的表單的標記是

,所以應該沒問題。無論如何,thx的建議。 – 2012-08-06 11:23:05