以下文字复制来自百度知道,因此排版等...我实在不知道ViewState和私有字段有什么区别了,网上说的都没有用,什么维持控件状态,还不如给我实际的代码让我测试。
所以说,我不问他们的区别了,我直接问,怎么能实现像TextBox一样,在回传后还能保持输入的东西。
下面是我测试的代码,怎么改才能在文本框中输入字符串后回传还能保持输入的字符串(页面要放一个BUTTON,专门来回发,也就是至少在BUTTON的CLICK事件中获取的到控件的TEXT属性不是原始的了)?
 public class test:WebControl 
    {
        private string text = string.Empty;
        public string Text
        {
           // get{return text;}
           // set{text=value;}
            get {return  ViewState["Text"] == null ? string.Empty : ViewState["Text"].ToString(); }
            set { ViewState["Text"] = value; }
        }
        protected override void Render(HtmlTextWriter writer)
        {
                writer.AddAttribute(HtmlTextWriterAttribute.Value, Text);
                writer.AddAttribute(HtmlTextWriterAttribute.Id, this.ClientID);
                writer.RenderBeginTag(HtmlTextWriterTag.Input);
                writer.RenderEndTag();
           
        }
    }XX回复:
其实,你描述的问题,我真不太明白是啥意思。
随便跟你扯几句吧:
ViewState是保持服务器控件的状态或者保存在当前网页可以访问的全局变量。
private标示和他根本是两回事:
1.
private标示表示的是一个类里面的一个字段,只有该类里面的成员可以访问,针对的是c#语言,不管是什么平台(c/s,b/s,移动);
ViewState只表示b/s平台
2.
ViewState只存在于继承于System.Web以下的类中,
而private是可以存在于任何类中
3.
ViewState保存的内容只在该页面打开的时候存在,而private可以通过该类中的public方法进行访问。比如你定义的这个类,外部可以通过一个公有的方法来修改或者读取text字段,但是是不可以通过任何方法访问到ViewState["Text"]关于你说的服务器控件回发后保存状态,虽然是用的ViewState,但其关键在于采用了一个hidden控件来保存ViewState保存的服务器控件状态。如果你也想达到这种效果,你给自己的用户控件加个hidden就可以了。或者比较直接的,你的控件继承服务器的button或者在控件里面拖个服务器的button进去,也是可以的 
追问:没看懂?
我上面的代码是一个服务器控件的雏形,只有Text一个属性,它的作用就是在Render中输出一个文本框。
------------------以上为背景----------------
现在要实现的是,在页面生产的文本框中输入东西,然后页面回发(不管什么回复,比如页面上一个按钮按下时),回发后,1,要能在后台获取文本框中的数据;
2,页面中用户输入的东西不被清空。
其实微软自带的TextBox就行,拖一个加一个Button你测试就知道了。

解决方案 »

  1.   

    有人可以把http://topic.csdn.net/u/20120314/21/cfd2d7cf-fd35-44fe-8618-d7a8871b131b.html一起帮我回答了么?
      

  2.   

    1. 请你不用服务器控件完成一次请求,输出,比如有一个输入框,用户输入一串字符.你再显示这串字符~~~~记住不要用服务器控件~~~~你再用服务器控件完成一次,你才明白什么叫维护状态~~~~2  自己去测试private 与public protected internal的差异如果测不出来~~~~~
    那就多看书,直到看懂~~会用~
      

  3.   


    1.我就是想知道怎么显示它!如果页面上的其他按钮回发了,是不会激发这个控件的事件的,我都获取不到输入框里面的东西,我怎么显示??
    如果连服务器控件都不会的人,那不一辈子当个小程序员算了!
    2.我的问题好像和public protected internal不搭杠吧?知道什么是ViewState么?
      

  4.   

    默认的控件,不论是否服务器控件,只要参与了post,都会在load(记不太清楚那个阶段)之前进行状态保持
    如果是你编程产生的控件,记得,在load之前添加控件到页面
      

  5.   

    ViewState数据是存放在一个页面中的一个hidden的html元素中的,叫做__VIEWSTATE,见下面:<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwULLTIxMTg0MDQyMjYPZBYCAgMPZBYCAgEPDxYCHgRUZXh0ZGRkZL1qUrHiKheESOhiNDHraHpO0yUUW6PR6UOkiRzqnlm9" />你的页面在显示之前,它会把这个__VIEWSTATE中的数据放到元素中去。
    ViewState和那些private什么的都没有任何关系。
    ViewState在显示到页面之前是一个放在内存中的键值对,只有当页面执行SaveState时,它才会把它编码成Base64,然后放到__VIEWSTATE元素中
      

  6.   


    那我的代码如何更改才能获取到值呢?也就是在不添加其他input和JS的情况下页面提交(其他按钮提交了页面)时能在事件中获取到文本框中的文字,且回发后不清空文本框内的文本。
      

  7.   

    自己解决了,少继承了一个类,并且必须为name,而不是为ID,参考TextBox就能看出来。不过还是谢谢大家了。散分。
      

  8.   

    你实现IPostEventHandler接口就行了,可以百度下这个借口的用法
      

  9.   

    textbox实现了这个接口,这个接口可以回传textbox的值,Viewstate只是保存状态,两者并不冲突,只是用途不同而已