WebUserControl 对 Viewstate 的更改在页面级别不可访问

WebUserControl changes to Viewstate are not accessible at page level

我正在开发一个 ASP.NET Webforms 应用程序,在使用 WebUserControl 时我偶然发现了一个我不理解的行为。

我的 WebUserControl 将 4 个字符串放入 ViewState:

var projectCode = SelectedProject.Value;
ViewState["ProjectCode"] = projectCode;

var resourceId = SelectedResource.Value;
ViewState["ResourceCode"] = resourceId;

var indicatorId = SelectedIndicator.Value;
ViewState["IndicatorCode"] = indicatorId;

var areaCode = SelectedArea.Value;
ViewState["AreaCode"] = areaCode;

完成后,我的页面应该从 ViewState 中获取这些值,但 ViewState 不包含任何项目并且 returns null 所有 4 个键。

为什么页面层的ViewState是空的?如果我不应该为此使用 ViewState,那么来回传递值的最佳方法是什么?

因为您使用的键是当前用户控件的本地键:在视图状态中为用户控件定义的 "AreaCode" 与为页面定义的键不同。 此行为与 Session 不同。

您可以使用 Session 字典或在用户控件上实现一些 public 方法来检索值。