ASP.NET 向导控件在更改 ActiveStepIndex 后导航两次
ASP.NET wizard control navigates twice after changing ActiveStepIndex
我有一个包含大量向导的应用程序。在其中一个向导中,当用户处于最后一步时,一些代码会在代码隐藏中运行,以检查到目前为止表单的值。如果其中一个值有问题,将显示 yes/no 弹出窗口(用户控制)。如果用户单击“是”,他们将通过更改代码隐藏中的 ActiveStepIndex
进入具有不正确值的步骤。
这在本地和我的构建服务器上都有效,步骤发生了变化,导航发生了,一切都很好。但是在我的 QA 服务器上,另一个 post-back 会立即触发,再次导航到上一步。
通过调试我发现AJAX post-back是由MicrosoftAjax.js
的_domReady
函数触发的。显然它应该检查浏览器导航事件或类似事件。在我的例子中,在 _navigate
函数中完成的状态比较导致第二个 post-back 发生,因为这两个状态不同。新状态不同于旧状态,旧状态由 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();
}
知道为什么服务器状态在一个环境中可能不同而在另一个环境中却不同吗?顺便说一句,它发生在所有浏览器中。
我发现警告弹出窗口位于向导的更新面板之外。在我将它移入更新面板后,视图状态同步并且没有额外的 post-back 了。
不过我还是不明白为什么它在本地运行良好。
我有一个包含大量向导的应用程序。在其中一个向导中,当用户处于最后一步时,一些代码会在代码隐藏中运行,以检查到目前为止表单的值。如果其中一个值有问题,将显示 yes/no 弹出窗口(用户控制)。如果用户单击“是”,他们将通过更改代码隐藏中的 ActiveStepIndex
进入具有不正确值的步骤。
这在本地和我的构建服务器上都有效,步骤发生了变化,导航发生了,一切都很好。但是在我的 QA 服务器上,另一个 post-back 会立即触发,再次导航到上一步。
通过调试我发现AJAX post-back是由MicrosoftAjax.js
的_domReady
函数触发的。显然它应该检查浏览器导航事件或类似事件。在我的例子中,在 _navigate
函数中完成的状态比较导致第二个 post-back 发生,因为这两个状态不同。新状态不同于旧状态,旧状态由 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();
}
知道为什么服务器状态在一个环境中可能不同而在另一个环境中却不同吗?顺便说一句,它发生在所有浏览器中。
我发现警告弹出窗口位于向导的更新面板之外。在我将它移入更新面板后,视图状态同步并且没有额外的 post-back 了。
不过我还是不明白为什么它在本地运行良好。