最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

asp.net 動態(tài)創(chuàng)建TextBox控件及狀態(tài)數(shù)據(jù)如何加載

 更新時間:2012年12月20日 15:24:22   作者:  
接著上文Asp.net TextBox的TextChanged事件你真的清楚嗎?這里我們來說說狀態(tài)數(shù)據(jù)時如何加載的,需要的朋友可以參考下

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

復(fù)制代碼 代碼如下:

internal enum ControlState
{
Constructed,
FrameworkInitialized,
ChildrenInitialized,
Initialized,
ViewStateLoaded,
Loaded,
PreRendered
}

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

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

如圖


但是運(yùn)行以后之就發(fā)生變化了:

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

復(fù)制代碼 代碼如下:

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,可見控件動態(tài)添加的時候是否加載狀態(tài)數(shù)據(jù)與狀態(tài)數(shù)據(jù)的保存有關(guān)。而狀態(tài)數(shù)據(jù)的保存主要就是SaveViewState完成的,這里我第一次post的時候SaveViewState返回數(shù)據(jù):

所以第二次能取到上次post過來的數(shù)據(jù)。

其中與SaveViewState有關(guān)的方法主要有:

復(fù)制代碼 代碼如下:

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;
}
}

到這里我們知道保存狀態(tài)信息主要是在StateBag 的SaveViewState方法中,這里有一個檢查  if (item.IsDirty) ,在TextBox的SaveViewState方法中有一個判斷
復(fù)制代碼 代碼如下:

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

與它的SaveTextViewState 屬性有關(guān)。

那么我們可以總結(jié)一下:動態(tài)創(chuàng)建的控件默認(rèn)是在被添加的時候加載器狀態(tài)數(shù)據(jù),如果是靜態(tài)添加的數(shù)據(jù)那就是LoadAllState來處理狀態(tài)數(shù)據(jù)的加載。狀態(tài)數(shù)據(jù)的加載與控件的SaveViewState密切相關(guān),如果該方法的返回值為null既沒有狀態(tài)信息,那也不需要加載什么狀態(tài)信息了。

相關(guān)文章

  • asp.net Server.MapPath方法注意事項(xiàng)

    asp.net Server.MapPath方法注意事項(xiàng)

    當(dāng)我發(fā)布之后,對存儲圖片的文件夾創(chuàng)建了虛擬目錄,并賦予該目錄寫入的權(quán)限,但是,當(dāng)我上傳圖片的時候,總是失敗。以前沒遇到過這種情況,覺得很是怪異,所以想盡辦法去解決。
    2008-09-09
  • 淺談.Net Core后端單元測試的實(shí)現(xiàn)

    淺談.Net Core后端單元測試的實(shí)現(xiàn)

    這篇文章主要介紹了淺談.Net Core后端單元測試的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • 探究ASP.NET Core Middleware實(shí)現(xiàn)方法

    探究ASP.NET Core Middleware實(shí)現(xiàn)方法

    這篇文章主要介紹了探究ASP.NET Core Middleware實(shí)現(xiàn)方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-02-02
  • ASP.NET下使用xml反序列化、緩存依賴實(shí)現(xiàn)個性化配置文件的實(shí)時生效

    ASP.NET下使用xml反序列化、緩存依賴實(shí)現(xiàn)個性化配置文件的實(shí)時生效

    本文主要介紹了ASP.NET下使用xml反序列化、緩存依賴實(shí)現(xiàn)個性化配置文件的實(shí)時生效的方法。具有一定的參考價值,下面跟著小編一起來看下吧
    2017-01-01
  • Entity Framework中執(zhí)行sql語句

    Entity Framework中執(zhí)行sql語句

    這篇文章介紹了Entity Framework中執(zhí)行sql語句的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03
  • .Net Core如何對MongoDB執(zhí)行多條件查詢

    .Net Core如何對MongoDB執(zhí)行多條件查詢

    這篇文章主要介紹了.Net Core如何對MongoDB執(zhí)行多條件查詢,文中示例代碼非常詳細(xì),幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • ASP.NET?Core擴(kuò)展庫ServiceStack.Redis用法介紹

    ASP.NET?Core擴(kuò)展庫ServiceStack.Redis用法介紹

    這篇文章介紹了ASP.NET?Core擴(kuò)展庫ServiceStack.Redis的用法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-02-02
  • Global.asax取絕對路徑的方法

    Global.asax取絕對路徑的方法

    通過string absolutelyPath可設(shè)置對路徑,具體代碼如下,感興趣的朋友可以參考下哈,希望對你有所幫助
    2013-04-04
  • .net重啟iis線程池和iis站點(diǎn)程序代碼分享

    .net重啟iis線程池和iis站點(diǎn)程序代碼分享

    服務(wù)器監(jiān)控,一定時間內(nèi)或者iis異常就需要重啟線程池和站點(diǎn),下面我們用代碼來做這個功能
    2013-12-12
  • .Net插件框架Managed Extensibility Framework簡介

    .Net插件框架Managed Extensibility Framework簡介

    這篇文章介紹了.Net插件框架Managed Extensibility Framework,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07

最新評論

荣成市| 西乌| 青田县| 湘乡市| 基隆市| 称多县| 开平市| 安溪县| 刚察县| 临安市| 夹江县| 高雄市| 澳门| 龙川县| 肇东市| 台山市| 灵川县| 体育| 高邮市| 安仁县| 惠水县| 连南| 康平县| 高淳县| 开化县| 祁东县| 灵山县| 云龙县| 临沧市| 中超| 甘德县| 巫山县| 周至县| 荔浦县| 临海市| 湾仔区| 嘉峪关市| 青铜峡市| 崇信县| 黔西县| 黄石市|