【发布时间】:2016-02-26 21:46:21
【问题描述】:
我有一个包含一堆向导的应用程序。在其中一个向导中,当用户处于最后一步时,一些代码在代码隐藏中运行以检查表单的值。如果其中一个值存在问题,则会显示是/否弹出窗口(用户控制)。如果用户单击“是”,他们将通过更改代码隐藏中的ActiveStepIndex 进入错误值的步骤。
这在本地和我的构建服务器上工作,步骤发生了变化,导航发生了,一切都很好。但在我的 QA 服务器上,随后会立即触发另一个回发,再次导航到上一步。
通过调试发现AJAX回发是由MicrosoftAjax.js的_domReady函数触发的。显然它应该检查浏览器导航事件或类似事件。在我的例子中,在 _navigate 函数中完成的状态比较导致第二次回发发生,因为这两个状态是不同的。新状态与旧状态不同,旧状态由ScriptManager source 设置。
function Sys$_Application$_navigate(entry) {
this._ensureHistory();
var state = this._deserializeState(entry);
if (this._uniqueId) {
var oldServerEntry = this._state.__s || '';
var newServerEntry = state.__s || '';
if (newServerEntry !== oldServerEntry) {
this._updateHiddenField(newServerEntry);
__doPostBack(this._uniqueId, newServerEntry);
this._state = state;
return;
}
}
this._setState(entry);
this._state = state;
this._raiseNavigate();
}
知道为什么服务器状态在一种环境中可能不同,而在另一种环境中则不同吗?顺便说一句,它发生在所有浏览器中。
【问题讨论】:
标签: c# asp.net webforms viewstate