2010-09-24 36 views
0

我有一個購物車頁面(Cart.aspx),它有一個按鈕(有時)會發送到第三方支付網關,如果需要付款。支付網關將處理付款,然後在我的網站(Order.aspx)上進行無聲郵件,以便更新訂單狀態。禁用ViewState的頁面是否仍在驗證__viewstate字段?

即使在頁面上禁用了viewstate,Order.aspx也會拋出無效的viewstate錯誤。

發生什麼事情是Cart.aspx(已啓用viewstate)發佈到付款網關,並且網關將作爲無聲郵件的一部分發回。即使Order.aspx的viewstate被禁用且驗證被禁用,它仍然會嘗試驗證它正在提供的__viewstate字段。

我知道設置EnableViewState=false會禁用__viewstate字段的渲染,但是如果另一個頁面提供該字段,它不應該仍然跳過驗證嗎?

我試着在Order.aspx的Page_Init事件上調用ViewState.Clear(),但ViewState顯然是空的。

有關如何解決此問題的任何建議?我不想禁用Cart.aspx上的ViewState(在某些情況下可能需要),但我無法弄清楚如何在Order.aspx上清除它。

回答

1

即使禁用ViewState,ASP.NET仍然需要它。它使用隱藏的__viewstate字段作爲視圖狀態,控制狀態並用於驗證請求。您可以創建自定義HttpHandler並讓訂單發佈到該頁面。當然你需要對請求的有效性保持謹慎。確保您可以確保請求是合法的,而不是來自黑客。

+0

它比這更糟糕 - 即使隱藏字段丟失或空白,並且頁面顯然不需要它,驗證代碼仍然運行! – 2016-04-08 17:13:01