-

- 加为好友
- 发送私信
- 在线聊天
-
lingdu_hua
- 等级:

- 可用分等级:
- 总技术专家分:
- 总技术专家分排名:
- 揭帖率:
|
| 发表于:2008-08-21 17:15:10 楼主 |
- C# code
#region 自定义ViewState
/// <summary>
/// 指示服务器控件是否正在跟踪其视图状态更改
/// </summary>
private bool _isTrackingViewState;
/// <summary>
/// 创建StateBag类型对象
/// </summary>
private StateBag _viewState;
/// <summary>
/// 建立ViewState对象
/// </summary>
protected virtual StateBag ViewState
{
get
{
if (_viewState == null)
{
//如果未对其赋值,则返回空对象
_viewState = new StateBag(false);
if (_isTrackingViewState)
{
((IStateManager)_viewState).TrackViewState();
}
}
return _viewState;
}
}
#endregion
#region 自定义类型状态管理
bool IStateManager.IsTrackingViewState
{
get
{
return _isTrackingViewState;
}
}
void IStateManager.LoadViewState(object savedState)
{
if (savedState != null)
((IStateManager)ViewState).LoadViewState(savedState);
}
object IStateManager.SaveViewState()
{
object savedState = null;
if (_viewState != null)
{
savedState = ((IStateManager)_viewState).SaveViewState();
}
return savedState;
}
void IStateManager.TrackViewState()
{
_isTrackingViewState = true;
if (_viewState != null)
{
((IStateManager)_viewState).TrackViewState();
}
}
#endregion
1.我想问的是为什么只有LoadViewState方法内调用的是ViewState属性的LoadViewState方法,而其余的方法内都是调用的_viewState私有变量的对应方法呢? 2.另外还有一个问题,我的自定义控件里有一个自定义集合类型(MenuItems)的属性,该集合继承了BaseCollection,集合中项MenuItem类的状态管理也写了上面的那些代码,在MenuItems中也写了一套状态管理的代码,都是循环调用MenuItem的相应方法的,这样做是否可行呢?为什么当我在页面Page_Load的事件里添加MenuItem后,断点到MenuItem的SaveViewState()方法内却发现((IStateManager)_viewState).SaveViewState();的返回值是NULL?以至于在控件类中LoadViewState的时候读取不到值了. 请高手给段在集合属性中自定义视图状态管理的代码(最好包括控件类,集合类,和集合项类中的关键代码),MSDN上是用ArrayList做的,而且并未给出相关自定义视图状态的代码... 谢谢了. |
|
|
|
100
修改
删除
举报
引用
回复
| |