国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - ASP.NET教程 - asp.net 動態創建TextBox控件及狀態數據如何加載

asp.net 動態創建TextBox控件及狀態數據如何加載

2019-10-12 11:20asp.net技術網 ASP.NET教程

接著上文Asp.net TextBox的TextChanged事件你真的清楚嗎?這里我們來說說狀態數據時如何加載的,需要的朋友可以參考下

接著上文Asp.net TextBox的TextChanged事件你真的清楚嗎? 這里我們來說說狀態數據時如何加載的。
雖然在Control中有調用狀態轉存的方法,但是這里有一個判斷條件 if (_controlState >= ControlState.ViewStateLoaded) 一般的get請求這里的條件是不滿足的。

復制代碼代碼如下:

internal enum ControlState 

Constructed, 
FrameworkInitialized, 
ChildrenInitialized, 
Initialized, 
ViewStateLoaded, 
Loaded, 
PreRendered 


我們知道在page的ProcessRequest中this.ControlState = ControlState.FrameworkInitialized;ProcessRequestMain方法中在Init后有調用this.InitRecursive(null);在這個方法里面有這么一句_controlState = ControlState.Initialized;,在LoadAllState()方法中有這么一句 base.LoadViewStateRecursive(second.Second);,而LoadViewStateRecursive中又有_controlState = ControlState.ViewStateLoaded這句帶代碼,所以我們在Page_load中動態條件控件時, if (_controlState >= ControlState.ViewStateLoaded)條件成立,如圖:

 

asp.net 動態創建TextBox控件及狀態數據如何加載

所以在運行this.form1.Controls.Add(txt);這句以前,txt的值為demo1,

如圖

asp.net 動態創建TextBox控件及狀態數據如何加載

 

但是運行以后之就發生變化了:

asp.net 動態創建TextBox控件及狀態數據如何加載

當然這里的txt.Text值也是我上次post過來的舊值,新值是在控件的LoadPostData方法中重新綁定。在默認的LoadViewStateRecursive方法中有一個很重要的判斷

復制代碼代碼如下:

internal void LoadViewStateRecursive(object savedState) { 
// nothing to do if we have no state 
if (savedState == null || flags[disableViewState]) 
return; 

。。。。。。。 

_controlState = ControlState.ViewStateLoaded 


大家看到我上面是一個CustTextBoxt : TextBox控件,如果我們直接添加TextBox控件的話,那么著這里的txt.Text一直都是demo1,可見控件動態添加的時候是否加載狀態數據與狀態數據的保存有關。而狀態數據的保存主要就是SaveViewState完成的,這里我第一次post的時候SaveViewState返回數據:

 

asp.net 動態創建TextBox控件及狀態數據如何加載

所以第二次能取到上次post過來的數據。

其中與SaveViewState有關的方法主要有:

復制代碼代碼如下:

public class TextBox : WebControl, IPostBackDataHandler, IEditableTextControl { 
protected override object SaveViewState() { 
if (SaveTextViewState == false) { 
ViewState.SetItemDirty("Text", false); 

return base.SaveViewState(); 

private bool SaveTextViewState { 
get { 
// 


// Must be saved when 
// 1. There is a registered event handler for SelectedIndexChanged 
// 2. Control is not enabled or visible, because the browser's post data will not include this control 
// 3. The instance is a derived instance, which might be overriding the OnTextChanged method 

if (TextMode == TextBoxMode.Password) { 
return false; 


if ((Events[EventTextChanged] != null) || 
(IsEnabled == false) || 
(Visible == false) || 
(ReadOnly) || 
(this.GetType() != typeof(TextBox))) { 
return true; 


return false; 




public class WebControl : Control, IAttributeAccessor { 
protected override object SaveViewState() { 
Pair myState = null; 

// Save values cached out of view state 
if (_webControlFlags[disabledDirty]) { 
ViewState["Enabled"] = !flags[isWebControlDisabled]; 


if (ControlStyleCreated) { 
// the style shares the StateBag of its owner WebControl 
// call SaveViewState to let style participate in state management 
ControlStyle.SaveViewState(); 


object baseState = base.SaveViewState(); 
object aState = null; 
if (attrState != null) { 
aState = attrState.SaveViewState(); 


if (baseState != null || aState != null) { 
myState = new Pair(baseState, aState); 

return myState; 


public class Control : IComponent, IParserAccessor, IUrlResolutionService, IDataBindingsAccessor, IControlBuilderAccessor, IControlDesignerAccessor, IExpressionsAccessor { 
protected virtual object SaveViewState() { 
// Save values cached out of view state 
if (flags[visibleDirty]) { 
ViewState["Visible"] = !flags[invisible]; 

if (flags[validateRequestModeDirty]) { 
ViewState["ValidateRequestMode"] = (int)ValidateRequestMode; 

if (_viewState != null) 
return _viewState.SaveViewState(); 

return null; 


public sealed class StateBag : IStateManager, IDictionary { 
internal object SaveViewState() { 
ArrayList data = null; 
if (bag.Count != 0) { 
IDictionaryEnumerator e = bag.GetEnumerator(); 
while (e.MoveNext()) { 
StateItem item = (StateItem)(e.Value); 
if (item.IsDirty) { 
if (data == null) { 
data = new ArrayList(); 

#if OBJECTSTATEFORMATTER 
data.Add(new IndexedString((string)e.Key)); 
#else 
data.Add(e.Key); 
#endif 
data.Add(item.Value); 




return data; 

}


到這里我們知道保存狀態信息主要是在StateBag 的SaveViewState方法中,這里有一個檢查  if (item.IsDirty) ,在TextBox的SaveViewState方法中有一個判斷

復制代碼代碼如下:

if (SaveTextViewState == false) { 
ViewState.SetItemDirty("Text", false); 


與它的SaveTextViewState 屬性有關。

 

那么我們可以總結一下:動態創建的控件默認是在被添加的時候加載器狀態數據,如果是靜態添加的數據那就是LoadAllState來處理狀態數據的加載。狀態數據的加載與控件的SaveViewState密切相關,如果該方法的返回值為null既沒有狀態信息,那也不需要加載什么狀態信息了。

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 韩日欧美 | 欧美激情久久久久久 | 福利视频网站 | 午夜高清视频 | 99热69| 黄色毛片免费 | 亚洲欧美在线一区 | 一区二区三区四区精品 | 亚洲字幕 | 亚洲免费视频一区二区 | 久久亚洲一区 | 一级色视频 | 日韩欧美中文字幕在线观看 | 欧美爱爱视频 | 日韩在线观看中文字幕 | 日韩中文字幕一区 | 丰满白嫩老熟女毛片 | 国产高清精品一区 | 欧美精产国品一二三区 | 91黄在线观看 | 亚洲精品久久久久久久久久久 | 久久久久国产一区二区三区四区 | 精品国产黄a∨片高清在线 欧美一级免费 | 亚洲天堂一区二区 | 亚洲三级在线观看 | 国产婷婷精品 | 日韩电影在线看 | 一级色网站 | 日本黄色一级电影 | 国偷自产av一区二区三区 | 午夜视频在线观看一区二区三区 | 久久99久久99精品免视看婷婷 | 中文字幕在线视频观看 | 黄色在线 | 一区二区三区久久 | 日韩电影免费在线观看 | 亚洲性片 | 久久久久久亚洲精品中文字幕 | 99综合在线| 一区二区免费 | 日韩在线视频观看 |