将控件改为实现IPostBackDataHandler接口
#region IPostBackDataHandler 成员
public bool LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection)
{
string txt = postCollection[this.UniqueID + ":txtText"];
string val = postCollection[this.UniqueID + ":txtValue"];
if(txt!= Text || val!=Value )
{
ViewState["Text"] = txt;
ViewState["Value"] = val;
return true;
}
return false;
}
public event EventHandler ValueChanged;
public void RaisePostDataChangedEvent()
{
if (ValueChanged != null)
ValueChanged(this, EventArgs.Empty);
}
#endregion
改造之后终于可以在UserControl中正确取得用户回填的值了!试着在UserControl这一级也使用这种方式取数,有出现了刚才的问题!看来在UserControl级别只能使用OnLoad来实现了.public bool LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection)
{
string txt = postCollection[this.UniqueID + ":txtText"];
string val = postCollection[this.UniqueID + ":txtValue"];
if(txt!= Text || val!=Value )
{
ViewState["Text"] = txt;
ViewState["Value"] = val;
return true;
}
return false;
}
public event EventHandler ValueChanged;
public void RaisePostDataChangedEvent()
{
if (ValueChanged != null)
ValueChanged(this, EventArgs.Empty);
}
#endregion
问题总算解决了,并且顺便实现了事件触发机制,控件更完善了算是个意外收获.
总结: 看来服务器端控件必须按照规范实现不同的接口,否则通过不规范的手段实现的功能也很不可靠.