【问题标题】:How to create a derived TextBox control?如何创建派生的 TextBox 控件?
【发布时间】:2011-11-08 16:19:25
【问题描述】:

我需要创建一个允许用户输入 HTML 标记的自定义 TextBox 控件。我添加了一个名为 HtmlEnabled 的新属性,默认为 false。如果它是假的,它将完全像原来的文本框;如果设置为 true,它将调用 Server.HtmlEncode 对文本进行编码。我从不创建自定义控件,谁能告诉我我需要做什么?我需要覆盖什么功能?谢谢。

我创建了我的 TextBoxEx 类,如下所示:当我将 HtmlEnabled 设置为 true 时,我仍然收到验证错误,谁能告诉我出了什么问题?

namespace WebApplication1
{
    [ToolboxData("<{0}:TextBoxEx runat=server></{0}:TextBoxEx")]
    public class TextBoxEx : System.Web.UI.WebControls.TextBox
    {
        public bool HtmlEnabled
        {
            get
            {
                return (bool)ViewState["HtmlEnabled"];
            }
            set
            {
                ViewState["HtmlEnabled"] = value;
            }
        }

        public TextBoxEx()
        {
            ViewState["HtmlEnabled"] = false;
        }

        public override string Text
        {
            get
            {
                if (HtmlEnabled)
                    return HttpUtility.HtmlEncode(base.Text);
                else return base.Text;
            }

            set
            {
                if (HtmlEnabled)
                    base.Text = HttpUtility.HtmlDecode(value);
                else base.Text = value;
            }
        }


    }
}

【问题讨论】:

标签: asp.net textbox custom-controls derived


【解决方案1】:

听起来您可以从 TextBox 控件继承并覆盖 Text 属性。这篇文章应该让您开始了解如何去做:

http://www.4guysfromrolla.com/articles/100103-1.aspx

【讨论】:

  • 这是我尝试过的。但是当我将 HtmlEnabled 设置为 true 时,我仍然收到验证错误。你知道我做错了吗?
【解决方案2】:

为了让页面接受 HTML 标签,您需要禁用请求验证。

<%@ Page Language="C#" ValidateRequest="false" AutoEventWireup="true" CodeBehind="TestPage.aspx.cs" Inherits="MyNamespace.TestPage" %>

这与文本框控件无关,请求验证会检查所有页面输入(查询字符串参数、cookie、标头和表单字段)以确保请求中没有潜在的恶意脚本。请注意,将其关闭后,您需要验证输入对您自己无害。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-04
    • 2012-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-23
    相关资源
    最近更新 更多