2012-08-03 163 views
8

控制樹我一個用戶控件內託管的ASP.NET窗體上的HTTP POST之後接收以下錯誤消息:無法加載視圖狀態。成視圖狀態被裝載

無法加載視圖狀態。要將視圖狀態加載到其中的控制樹必須與前一個請求期間用於保存視圖狀態的控制樹相匹配。例如,當動態添加控件時,在回發期間添加的控件必須與初始請求期間添加的控件的類型和位置相匹配。

這裏的附加信息:

  • 我運行.NET 4.5 RC
  • 這是一個基於4.7一把umbraco網站
  • 在我的本地開發機的形式工作完美
  • 此錯誤只發生具有.NET 4.5(只),MSSQL 2012 Express中的臨時服務器上,IIS 7.5,Windows 7的(我知道,這不是一個真正的服務器還沒有,有一天也許...)
  • 服務器不是Web農場的一部分(或花園,壽應該是irrevelant)
  • 用戶控制確實呈現動態

我已經應用了所有最新的服務包的控制。 我已經用完了想法吧!我甚至重新啓動了它,並且在服務器上執行了一個涉及歌曲和特殊舞蹈的無用功能。

感謝您的任何幫助或想法!

+0

此博客文章幫助我解決了大部分viewstate問題http://weblogs.asp.net/infinitiesloop/archive/2006/08/03/Truly-Understanding-Viewstate.aspx – gsharp 2012-08-03 12:58:58

回答

1

OK,所以答案是字面上:「建立一個新的服務器與所有相同的軟件作爲最後一個,然後重試」和現在的工作。

+1

注意:哦,不,問題在安裝Windows 8/.NET 4.5 RTM後返回。 – krisdyson 2012-08-16 09:39:52

+1

問題的原因似乎與System.Web.Optimization Bundle有關,因爲它在我將其關閉時工作 – krisdyson 2012-08-16 11:46:11

+1

好的,我可以看到將System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl添加到我的母版頁阻止ViewState正常工作。 – krisdyson 2012-08-16 12:16:03

18

當您動態添加控件時,重要的是您要添加哪些事件。

如果您在加載後發生的事件上添加了控件,它們將成爲您發送給客戶端的視圖狀態的一部分。

您必須在調用LoadViewState之前再次添加這些控件。

如果碰上凡決定控制添加本身存儲在ViewState或控件的值,那麼記住的是加載ViewState甚至在情況下,這個數據在Request.Params

參考可用在asp.net page life cycle

Page life cycle

+0

感謝您的支持......但是,因爲它在我的開發機器上工作,所以它不太可能成爲編碼錯誤,否則當部署它時,一切都會不斷破壞。 – krisdyson 2012-08-03 12:57:42

+1

如果它在服務器上的相同測試用例失敗,我不知道。但是這通常是編碼錯誤。從來沒有見過它是一個部署錯誤。 – nunespascal 2012-08-03 13:00:56

+0

是的!我可以做一些編碼錯誤的事情,但這很奇怪。無論如何感謝 – krisdyson 2012-08-03 13:02:27

16

我只是說EnableViewState="false"到我的網頁佔位和走了。希望它也適用於你。

+2

我也收到這個錯誤,即時我的網頁有gridview和'EnableViewState =「False」'gridview問題是解決了。 – user618612 2013-11-28 20:21:02

3

此錯誤的視圖狀態更改過程中主要發生:從一個模板其他的模板就像在項目模板,編輯項目模板,像窗體視圖,列表視圖,詳細信息視圖,網格視圖在ASP控制的情況下。淨(所有框架);

儘管從控制狀態改變說Item Template ---> Edit Template 以下內容將要改變

1)控制會改變(其ID &狀態)

2)及其位置將發生變化。

雖然看,如果改造後的任何回時,你會得到錯誤的

無法加載視圖狀態。控制樹成視圖狀態 加載....

如果您正在使用數據綁定樣(按鈕,link_button_Image_button事件),你會得到這個錯誤報告單獨的控制!

爲了避免這個錯誤>>>一旦你在調用數據源綁定的方法(不要在點擊或任何後期事件發生後調用)中從一個模板更改爲其他模板。

+0

感謝朋友 您給出的正確理由 – Arindam 2016-08-13 16:29:02

0

我用與id相同的值添加「name」屬性,那麼這個問題就不存在了。

<input type="button" id="extractBomInfoBtn" name="extractBomInfoBtn" value="Extract" class="button textonly" /> 
0

檢查您是否在頁面加載事件中直接使用控件的綁定方法。這可能會導致此問題。

0

您可以添加每個用戶控件

OR

您可以在控制設置enableviewstate=false,如果你不需要視圖狀態

0

在我來說,我有(OnPageIndexChanging)事件網格視圖新的佔位符 ,當我點擊一個頁面,直到我點擊兩次,纔會發生任何事情!

我是令人耳目一新設置新的頁面索引之前的數據源。


這是我做錯了

grd.DataSource = data; 
grd.DataBind(); 
grd.PageIndex = e.NewPageIndex; 

這是正確的方式

grd.PageIndex = e.NewPageIndex; 
grd.DataSource = data; 
grd.DataBind(); 
0

我有同樣的問題。這個問題是在客戶端,但它並沒有發生在我的本地系統中。 後的google搜索,我曾寫過小時的EnableViewState =「假」在aspx頁面我的表標籤,它具有所有的動態控制,然後我刪除了所有的視圖狀態變量,而是我創造了aspx頁面一些隱藏的文本框,並接受DB值放入代碼中並在整個代碼中使用它們。然後它解決了我的問題。 但是,我仍然無法弄清楚究竟是什麼問題。

0

如果您在控件中覆蓋了SaveViewState,但不覆蓋LoadViewState,則可能發生這種情況。