2010-09-24 35 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