1

我需要创建一个允许用户输入 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;
            }
        }


    }
}
4

2 回答 2

0

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

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

于 2011-11-08T16:25:44.403 回答
0

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

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

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

于 2014-09-19T20:20:18.937 回答