我正在开发一个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不包含任何项目,并为所有4个键返回null
。
为什么页面级别的ViewState为空?如果我不应该使用ViewState,那么最好的方法是向前传递值吗?
答案 0 :(得分:2)
因为您使用的密钥对于当前用户控件是本地的:UserControl的视图状态中定义的“AreaCode”与为页面定义的密钥不同。 此行为与第一个会话不同。
您可以使用会话字典或在用户控件上实现一些公共方法来检索值。