Как создать производный элемент управления TextBox?

Мне нужно создать собственный элемент управления TextBox, который позволяет пользователю вводить HTML-теги. Я добавил новое свойство под названием HtmlEnabled, по умолчанию — false. Если оно ложно, оно будет действовать точно так же, как исходное TextBox; если для него установлено значение 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;
            }
        }


    }
}

person GLP    schedule 08.11.2011    source источник
comment
это хорошая ссылка dotnetguts.blogspot.com/2007 /09/web-user-control-in-aspnet.html   -  person Daniel Casserly    schedule 08.11.2011


Ответы (2)


Похоже, вы могли бы просто наследовать от элемента управления TextBox и переопределить свойство Text. Эта статья должна познакомить вас с тем, как это сделать:

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

person Jim Petkus    schedule 08.11.2011
comment
Это то, что я пробовал. Но я все еще получаю ошибку проверки, когда устанавливаю для HtmlEnabled значение true. Ты знаешь, что я сделал неправильно? - person GLP; 08.11.2011

Чтобы разрешить странице принимать HTML-теги, необходимо отключить проверку запросов.

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

Это не имеет ничего общего с элементом управления текстовым полем, проверка запроса проверяет все входные данные страницы (параметры строки запроса, файлы cookie, заголовки и поля формы), чтобы убедиться, что в запросе нет потенциально вредоносных сценариев. Имейте в виду, что, отключив его, вам нужно будет убедиться, что ввод не наносит вреда вам.

person NightOwl888    schedule 19.09.2014