在用户自定义控件过程中,需要在回传过程中保存控件的某个值,需要实现IPostBackDataHandler接口,此接口有两个方法:
1.public bool LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection)
2.public void RaisePostDataChangedEvent()
其中第一个方法的作用是,调入回传的数据,并确定数据是否在上次操作中进行了更改;第二个方法作用是触发数据更改的事件。
例子:

public class ImplIPostBackDataHandlerDemo : System.Web.UI.WebControls.WebControl, IPostBackDataHandler
...{
public DateTime SelectedDateTime
...{
get
...{
if (null == this.ViewState["SelectedDateTime"])
return DateTime.MinValue;
return Convert.ToDateTime(this.ViewState["SelectedDateTime"]);
}
set
...{
this.ViewState["SelectedDateTime"] = value;
}
}

/**//// <summary>
/// SelectedDateTimeChanged事件
/// </summary>
public event EventHandler SelectedDateTimeChanged
...{
add
...{
base.Events.AddHandler(OnSelectedDateTimeChanged, value);
}
remove
...{
base.Events.RemoveHandler(OnSelectedDateTimeChanged, value);
}
}
protected void OnSelectedDateTimeChange(EventArgs e)
...{
EventHandler handler = (EventHandler)base.Events[SelectedDateTimeChanged];
if (handler != null)
...{
handler(this, e);
}
}


IPostBackDataHandler Members#region IPostBackDataHandler Members
public bool LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection)
...{
string selectedDateTime = postCollection[postDataKey]; //取得当前控件的SelectedDateTime回传值
if (null != selectedDateTime)
...{
DateTime dt;
if (DateTime.TryParse(selectedDateTime, out dt))//判断是否发生了变化
...{
if (this.SelectedDateTime != dt)
...{
this.SelectedDateTime = dt;
return true; //引发RaisePostDataChangedEvent
}
return false;
}
}
return false;
}

/**//// <summary>
///
/// </summary>
public void RaisePostDataChangedEvent()
...{
this.OnSelectedDateTimeChange(EventArgs.Empty);//自定义的事件,用户可以选则是否有事件
}
#endregion
}
本文介绍如何通过实现 IPostBackDataHandler 接口来保存 ASP.NET 用户自定义控件的状态。主要讨论 LoadPostData 方法用于检测控件状态是否发生变化及 RaisePostDataChangedEvent 方法触发状态改变事件。
67

被折叠的 条评论
为什么被折叠?



