技术开发 频道

Asp.net控件开发学习之数据回传

       下面通过一个Demo来展示IPostDataHandler

  DEMO1 自己写一个拥有状态的TextBox控件

  通过这个Demo可以更清楚的让我们明白ViewState和PostBack Data之间通过实现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实现。通过实现IPostBackDataHandler接口,我们可以在每次回传到服务器后保存TextBox的状态.即TextBox的Value的值.

  注意在Render方法里有:Page.VerifyRenderingInServerForm(this);,这行代码表示此控件必须在<form>标签内,如果不在此标签内,则会报错.所有需要实现数据回传的控件最好都要使用这个方法。TextBoxDemo控件的使用方法这里就不再累述了。

        ASP.net控件状态

        在asp.net 2.0以后的版本。可以通过设置控件的EnableViewState属性来控制单个控件是否保存其状态。在一些访问量比较大的网站上,如果不注意关闭不需要的ViewState,则用户在每回提交时都会导致传送额外的ViewState字符串,这回导致性能问题.

        控件的状态还有一个很棒的特性是在即使ViewState被禁用的情况下,控件的状态保持依然可用。

查看原文

0
相关文章