我这里有一个自定义控件
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Web.UI.WebControls; using System.Web.UI; namespace ClassLibrary1 { public class Control : WebControl { protected override HtmlTextWriterTag TagKey { get { return HtmlTextWriterTag.Div; } } public string Text { get { object o = ViewState["Text"]; if (o != null) { return o.ToString(); } else { return string.Empty; } } set { this.ViewState["Text"] = value; } } protected override void RenderContents(HtmlTextWriter writer) { base.RenderContents(writer); writer.Write("<input tupe='text' id='Text_Input' value='"+this.Text+"'>"); } } }
页面上引用了这个控件,并且我有一个button,我想要点击button的时候可以把
Text_Input 里面输入的值传出来
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace WebApplication2 { public partial class WebForm1 : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } protected void Button1_Click(object sender, EventArgs e) { string s = this.Control1.Text; } } }
页面的后台代码我是这样写的,这里的s是”“。
我大概知道我的问题是因为在input里输入值后viewstate里并没有更新,然后我去viewstate中取值,当然还是”“。
但是我却不知道给怎么做。求指教~~
没看,感觉大概意思是没弄懂客户端跟服务器之间的关系,如果你想你写的C#代码执行,那肯定要回发到服务器了。
这里截取的是所有页面发送到服务器的信息,这里并没有 我的控件 我的控件Id是MyControl
而我用
Page.FindControl(“MyControl”)
这句代码确实找到了我的控件,但是属性值并不是在客户端的文本框中输入的值,而是原本在服务器端赋的值,就是说我的控件在客户端输入的值没有被传到服务器
Page.RegisterRequiresViewStateEncryption();
我在Oninit中有加入上面一局代码
关于视图状态和控件状态可以参考我下面两篇文章
http://www.cnblogs.com/chenxizhang/archive/2009/04/02/1428295.html
http://www.cnblogs.com/chenxizhang/archive/2009/04/02/1427827.html
protected override void OnLoad(EventArgs e) { base.OnLoad(e); Page.RequiresControlState(this); } protected override void LoadControlState(object savedState) { base.LoadControlState(savedState); this.Text = savedState.ToString(); }
我在代码里重写了这两个方法了,还是没有效果呢,
解决了,查msdn查的我都脑袋疼