Asp.net控件开发学习笔记(六)----数据回传
生活随笔
收集整理的這篇文章主要介紹了
Asp.net控件开发学习笔记(六)----数据回传
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
在Asp.net中,利用Http Post的回傳機制意味著可以再客戶端存儲狀態(tài)并且可以在服務器接收.Asp.net中大部分控件都提供了存儲自身狀態(tài)的功能并且在自身狀態(tài)改變時引發(fā)對應事件。IPostDataHandler接口提供了在服務器處理客戶端通過Http Post回傳數(shù)據(jù)的方法。
IPostDataHandler
通過實現(xiàn)IPostDataHandler接口,服務器可以在不使用Page和Request對象的情況下來讀取客戶端回傳數(shù)據(jù)。IPostDataHandler還提供了在用戶狀態(tài)改變的情況下來引發(fā)相應事件的框架。IPostDataHandler的定義如下:
public interface IPostBackDataHandler
{
public bool LoadPostData(string postDataKey,
NameValueCollection postCollection);
public void RaisePostDataChangedEvent();
}
對于LoadPostData函數(shù),如果返回值為true,則會引發(fā)下面的RaisePostDataChangeEvent方法。這個方法中我們可以加入需要引發(fā)的事件,比如:
public virtual void RaisePostDataChangeEvent()
{
OnTextChanged(EventArgs.Empty);
}
這個方法有兩個參數(shù),先說第二個參數(shù),第二個參數(shù)返回鍵值對,key(鍵)是控件的unique id,這個id是通過客戶端的id來決定的,大多數(shù)情況下,這兩個id相等,比如客戶端的<input id=”xx” runat=”server” />則在服務端的unique id也會是”xx”,但是如果控件放在gridview或者masterpage里的話,uniqueid會是母控件的uniqueid+分隔符+子控件的uniqueid.而value(值)則是對應控件的回傳數(shù)據(jù)。比如下圖:
在頁面只有兩個控件,TextBox控件和Button控件,前兩個是asp.net內置的ViewState和驗證。而第三個是id名為”cc”的TextBox,第四個是id為Button1的button.則可以看出postCollection參數(shù)其實是頁面所有實現(xiàn)了IPostBackDataHandler接口的回傳數(shù)據(jù),而第一個參數(shù)postDataKey則是這個方法所屬控件的uniqueid.
所以可以這樣來獲得本控件這一次的回傳數(shù)據(jù):
postCollection[postDataKey]
當然也可以獲得其他控件這一次的回傳數(shù)據(jù)以達到和其它控件的交互,比如:
postCollection[3]
下面通過一個Demo來展示IPostDataHandler
DEMO1 ?自己寫一個擁有狀態(tài)的TextBox控件
通過這個Demo可以更清楚的讓我們明白ViewState和PostBack Data之間通過實現(xiàn)IPostDataHandler的交互。
代碼如下:
[ToolboxData("<{0}:textboxDemo runat=server></{0}:textboxDemo>")]
public class TextboxDemo : Control, IPostBackDataHandler
{
string _text;
public virtual string Text
{
get
{
object text = ViewState["Text"];
if (text == null)
return string.Empty;
else
return (string)text;
}
set
{
ViewState["Text"] = value;
}
}
public bool LoadPostData(string postDataKey,NameValueCollection postCollection)
{
Text = postCollection[postDataKey];
return false;
}
public virtual void RaisePostDataChangedEvent()
{
}
override protected void Render(HtmlTextWriter writer)
{
Page.VerifyRenderingInServerForm(this);
base.Render(writer);
//輸出 <INPUT type="text">標簽
writer.Write("<INPUT type=""text"" name=""");
writer.Write(this.UniqueID);
writer.Write(""" value=""" + this.Text + """ />");
}
}
這是一個簡單的TextBox實現(xiàn)。通過實現(xiàn)IPostBackDataHandler接口,我們可以在每次回傳到服務器后保存TextBox的狀態(tài).即TextBox的Value的值.
注意在Render方法里有:Page.VerifyRenderingInServerForm(this);,這行代碼表示此控件必須在<form>標簽內,如果不在此標簽內,則會報錯.所有需要實現(xiàn)數(shù)據(jù)回傳的控件最好都要使用這個方法.
TextBoxDemo控件的使用方法這里就不再累述了。
ASP.net控件狀態(tài)
在asp.net 2.0以后的版本??梢酝ㄟ^設置控件的EnableViewState屬性來控制單個控件是否保存其狀態(tài)。在一些訪問量比較大的網站上,如果不注意關閉不需要的ViewState,則用戶在每回提交時都會導致傳送額外的ViewState字符串,這回導致性能問題.
控件的狀態(tài)還有一個很棒的特性是在即使ViewState被禁用的情況下,控件的狀態(tài)保持依然可用.
分類: 控件開發(fā)
本文轉自CareySon博客園博客,原文鏈接:http://www.cnblogs.com/CareySon/archive/2009/10/09/1579781.html,如需轉載請自行聯(lián)系原作者
IPostDataHandler
通過實現(xiàn)IPostDataHandler接口,服務器可以在不使用Page和Request對象的情況下來讀取客戶端回傳數(shù)據(jù)。IPostDataHandler還提供了在用戶狀態(tài)改變的情況下來引發(fā)相應事件的框架。IPostDataHandler的定義如下:
public interface IPostBackDataHandler
{
public bool LoadPostData(string postDataKey,
NameValueCollection postCollection);
public void RaisePostDataChangedEvent();
}
對于LoadPostData函數(shù),如果返回值為true,則會引發(fā)下面的RaisePostDataChangeEvent方法。這個方法中我們可以加入需要引發(fā)的事件,比如:
public virtual void RaisePostDataChangeEvent()
{
OnTextChanged(EventArgs.Empty);
}
這個方法有兩個參數(shù),先說第二個參數(shù),第二個參數(shù)返回鍵值對,key(鍵)是控件的unique id,這個id是通過客戶端的id來決定的,大多數(shù)情況下,這兩個id相等,比如客戶端的<input id=”xx” runat=”server” />則在服務端的unique id也會是”xx”,但是如果控件放在gridview或者masterpage里的話,uniqueid會是母控件的uniqueid+分隔符+子控件的uniqueid.而value(值)則是對應控件的回傳數(shù)據(jù)。比如下圖:
在頁面只有兩個控件,TextBox控件和Button控件,前兩個是asp.net內置的ViewState和驗證。而第三個是id名為”cc”的TextBox,第四個是id為Button1的button.則可以看出postCollection參數(shù)其實是頁面所有實現(xiàn)了IPostBackDataHandler接口的回傳數(shù)據(jù),而第一個參數(shù)postDataKey則是這個方法所屬控件的uniqueid.
所以可以這樣來獲得本控件這一次的回傳數(shù)據(jù):
postCollection[postDataKey]
當然也可以獲得其他控件這一次的回傳數(shù)據(jù)以達到和其它控件的交互,比如:
postCollection[3]
下面通過一個Demo來展示IPostDataHandler
DEMO1 ?自己寫一個擁有狀態(tài)的TextBox控件
通過這個Demo可以更清楚的讓我們明白ViewState和PostBack Data之間通過實現(xiàn)IPostDataHandler的交互。
代碼如下:
[ToolboxData("<{0}:textboxDemo runat=server></{0}:textboxDemo>")]
public class TextboxDemo : Control, IPostBackDataHandler
{
string _text;
public virtual string Text
{
get
{
object text = ViewState["Text"];
if (text == null)
return string.Empty;
else
return (string)text;
}
set
{
ViewState["Text"] = value;
}
}
public bool LoadPostData(string postDataKey,NameValueCollection postCollection)
{
Text = postCollection[postDataKey];
return false;
}
public virtual void RaisePostDataChangedEvent()
{
}
override protected void Render(HtmlTextWriter writer)
{
Page.VerifyRenderingInServerForm(this);
base.Render(writer);
//輸出 <INPUT type="text">標簽
writer.Write("<INPUT type=""text"" name=""");
writer.Write(this.UniqueID);
writer.Write(""" value=""" + this.Text + """ />");
}
}
這是一個簡單的TextBox實現(xiàn)。通過實現(xiàn)IPostBackDataHandler接口,我們可以在每次回傳到服務器后保存TextBox的狀態(tài).即TextBox的Value的值.
注意在Render方法里有:Page.VerifyRenderingInServerForm(this);,這行代碼表示此控件必須在<form>標簽內,如果不在此標簽內,則會報錯.所有需要實現(xiàn)數(shù)據(jù)回傳的控件最好都要使用這個方法.
TextBoxDemo控件的使用方法這里就不再累述了。
ASP.net控件狀態(tài)
在asp.net 2.0以后的版本??梢酝ㄟ^設置控件的EnableViewState屬性來控制單個控件是否保存其狀態(tài)。在一些訪問量比較大的網站上,如果不注意關閉不需要的ViewState,則用戶在每回提交時都會導致傳送額外的ViewState字符串,這回導致性能問題.
控件的狀態(tài)還有一個很棒的特性是在即使ViewState被禁用的情況下,控件的狀態(tài)保持依然可用.
分類: 控件開發(fā)
本文轉自CareySon博客園博客,原文鏈接:http://www.cnblogs.com/CareySon/archive/2009/10/09/1579781.html,如需轉載請自行聯(lián)系原作者
總結
以上是生活随笔為你收集整理的Asp.net控件开发学习笔记(六)----数据回传的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JS中点语法和方括号语法访问属性的区别
- 下一篇: CSS补漏