当前位置:编程学习 > C#/ASP.NET >>

重写textbox,为什么不能赋值

我要对输入的数据进行转义,所以我对 textbox转义,但是给textbox赋值时候总是赋不上去,为什么??
  public override string Text
        {
            get
            {
                return System.Web.HttpUtility.HtmlEncode(base.Text);
            }
            set
            {
                base.Text =System.Web.HttpUtility.HtmlDecode(value);
            }
        }

System.Web.HttpUtility.HtmlDecode(value) 是新的值
但是 base.Text仍然是原值。
这个要怎么解决?? --------------------编程问答-------------------- 因为set属性只有在直接赋值的时候才会被调用
比如:myTxtBox.Text="ABC";

所以比如你在界面上敲键盘的话是不会调用这个的。
因此get出来的是原来的值。

重写protected override void OnKeyPress(KeyPressEventArgs e)吧。
或者:protected override void OnTextChanged(EventArgs e)

比如这个,没输入一个字符后添加一个 "-"

    class Class1 : TextBox
    {
        private string _text;

        public override string Text 
        { 
            get 
            {
                return this._text;
            }
            set
            {
                this._text = value;
            }
        }

        protected override void OnKeyPress(KeyPressEventArgs e)
        {
            //base.OnKeyPress(e);
            this._text += e.KeyChar;
        }

        protected override void OnTextChanged(EventArgs e)
        {
            //base.OnTextChanged(e);
            this._text += "-";
        }
   }
--------------------编程问答-------------------- 帅哥。楼主很明显是Asp.net的,你这是WinForm的事件。。。。。。

楼主,我想问你,你是不是自己建立了一个服务端控件,继承TextBox,然后重写Text属性,在aspx页面上,你是否是添加的自己写的服务端控件,而不是TextBox?如果是的话,你就调试一下吧,跟踪一下这个System.Web.HttpUtility.HtmlDecode(value),是否是你想要的

引用 1 楼  的回复:
因为set属性只有在直接赋值的时候才会被调用
比如:myTxtBox.Text="ABC";

所以比如你在界面上敲键盘的话是不会调用这个的。
因此get出来的是原来的值。

重写protected override void OnKeyPress(KeyPressEventArgs e)吧。
或者:protected override void OnTextChanged(Eve……
--------------------编程问答-------------------- 因为TextBox本身就是会做HTML编码的。

http://msdn.microsoft.com/zh-cn/library/system.web.ui.webcontrols.textbox.text.aspx

When the text box is rendered, the contents of this property are HTML-encoded. For example, if you set this property to "<b>Test</b>", the browser will display "<b>Test</b>", not "Test" in bold. 

--------------------编程问答--------------------
引用 3 楼  的回复:
因为TextBox本身就是会做HTML编码的。

http://msdn.microsoft.com/zh-cn/library/system.web.ui.webcontrols.textbox.text.aspx

When the text box is rendered, the contents of this property are HTML-encoded. For exa……

同意! --------------------编程问答--------------------
引用 2 楼  的回复:
帅哥。楼主很明显是Asp.net的,你这是WinForm的事件。。。。。。

楼主,我想问你,你是不是自己建立了一个服务端控件,继承TextBox,然后重写Text属性,在aspx页面上,你是否是添加的自己写的服务端控件,而不是TextBox?如果是的话,你就调试一下吧,跟踪一下这个System.Web.HttpUtility.HtmlDecode(value),是否是你想要的

引用 ……


但是原理一样。在页面上敲字同样不会调用setter属性。 --------------------编程问答-------------------- 哦。。sorry。我的错。 --------------------编程问答--------------------
引用 2 楼  的回复:
帅哥。楼主很明显是Asp.net的,你这是WinForm的事件。。。。。。

楼主,我想问你,你是不是自己建立了一个服务端控件,继承TextBox,然后重写Text属性,在aspx页面上,你是否是添加的自己写的服务端控件,而不是TextBox?如果是的话,你就调试一下吧,跟踪一下这个System.Web.HttpUtility.HtmlDecode(value),是否是你想要的


引用……

跟你说的差不多,但是System.Web.HttpUtility.HtmlDecode(value),是我想要的值比如“<script>”,但是外面一层就会变成“<script>” --------------------编程问答--------------------
引用 3 楼  的回复:
因为TextBox本身就是会做HTML编码的。

http://msdn.microsoft.com/zh-cn/library/system.web.ui.webcontrols.textbox.text.aspx

When the text box is rendered, the contents of this property are HTML-encoded. For exa……

本来我也以为自己会转,但是我发现个问题,就是如果开始我的“<script>”不转成“<script>”的话,set转义成“<script>”后显示的是"<script>".但如果我吧"<script>"转换成“<script>”,set时候转义成"<script>",返回出来的值还是“<script>”???? --------------------编程问答-------------------- 没人知道了吗???
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,