以下文字复制来自百度知道,因此排版等...我实在不知道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你测试就知道了。
所以说,我不问他们的区别了,我直接问,怎么能实现像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你测试就知道了。
解决方案 »
- <<<<<<江湖救急>>>>>>一个不是很大的问题
- C#读取大文本文件
- asp.net界面显示问题,很奇怪,有的浏览器能显示全部控件,有的浏览器只能显示部分控件,
- 请大侠帮忙:关于无法显示日历控件的问题,HELP……
- 排序问题
- 找不到类型或命名空间名称"Request",谁知道Request的命名空间是什么?
- 急!异常现象:点保存后显示“<input type="hidden" name="__VIEWSTATE" value="dDw5Nzk4ODk2Mzg7dDxwPGw8Y3VyUGFnZUluZGV4O1BhZ2VDb3Vud
- 谁做过农业银行商户支付接口?出现这种错误是什么问题,谁知道?
- 在VisualStudio中创建ASP.NET项目遇到的问题.
- 微信分享报错invalid signature
- .net高手,麻烦帮我解决一个问题,非常感谢
- 想把日期格式"dd\MM\yyyy"用正则表达式替换成"yyyy\MM\dd"
那就多看书,直到看懂~~会用~
1.我就是想知道怎么显示它!如果页面上的其他按钮回发了,是不会激发这个控件的事件的,我都获取不到输入框里面的东西,我怎么显示??
如果连服务器控件都不会的人,那不一辈子当个小程序员算了!
2.我的问题好像和public protected internal不搭杠吧?知道什么是ViewState么?
如果是你编程产生的控件,记得,在load之前添加控件到页面
ViewState和那些private什么的都没有任何关系。
ViewState在显示到页面之前是一个放在内存中的键值对,只有当页面执行SaveState时,它才会把它编码成Base64,然后放到__VIEWSTATE元素中
那我的代码如何更改才能获取到值呢?也就是在不添加其他input和JS的情况下页面提交(其他按钮提交了页面)时能在事件中获取到文本框中的文字,且回发后不清空文本框内的文本。