禁用ViewState的页面是否仍在验证__viewstate字段?

时间:2010-09-24 14:56:50

标签: c# asp.net viewstate

我有一个购物车页面(Cart.aspx),如果需要付款,该按钮会(有时)发布到第三方支付网关。支付网关将处理付款,然后对我的网站(Order.aspx)进行无声发布,以便我可以更新订单状态。

即使在页面上禁用了viewstate,Order.aspx也会抛出无效的viewstate错误。

正在发生的事情是Cart.aspx(已启用viewstate)发布到支付网关,网关将其作为静默帖子的一部分发回。即使Order.aspx禁用了视图状态并禁用了验证,它仍然会尝试验证它所给出的__viewstate字段。

我知道设置EnableViewState=false将禁用__viewstate字段的呈现,但如果另一个页面提供该字段,它是否应该仍然跳过验证?

我尝试在Order.aspx的ViewState.Clear()事件上调用Page_Init,但ViewState显然是空的。

有关如何解决此问题的任何建议?我不想在Cart.aspx上禁用ViewState(在某些情况下可能是必要的),但我无法弄清楚如何在Order.aspx上清除它。

1 个答案:

答案 0 :(得分:1)

即使禁用ViewState,ASP.NET仍然需要它。它使用隐藏的__viewstate字段作为视图状态,控制状态,并用于验证请求。您可以创建自定义HttpHandler并让订单发布到该页面。当然,您需要对请求的有效性保持谨慎。确保您可以确保请求是合法的,而不是来自黑客。