Обратите внимание, что в ASP.NET 4 и выше для получения ValidateRequest в директиве @Page необходимо добавить <httpRuntime requestValidationMode="2.0" />
в web.config. Смотрите эту страницу для деталей:
http://www.asp.net/whitepapers/aspnet4/breaking-changes
Но это мой предпочтительный подход:
namespace Controls
{
public class HtmlTextBox : TextBox
{
protected override bool LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection)
{
bool res = base.LoadPostData(postDataKey, postCollection);
Text = Text.Replace("<", "<").Replace(">", ">").Replace("&", "&");
return res;
}
protected override void OnPreRender(EventArgs e)
{
base.OnPreRender(e);
ScriptManager.RegisterOnSubmitStatement(this, this.GetType(), "htmlTextBox" + UniqueID, "try { var item = document.getElementsByName('" + UniqueID + "')[0]; item.value = item.value.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>'); } catch (err) {}");
}
}
}
И затем зарегистрируйте элемент управления в web.config:
<system.web>
<pages>
<controls>
<add tagPrefix="uc1" namespace="Controls" />
</controls>
</pages>
</system.web>
Таким образом, вы можете просто использовать <uc1:HtmlTextBox runat="server" />
, если вы хотите разрешить текстовому полю публиковать html, но другие элементы управления на странице будут по-прежнему заблокированы для публикации html в отличие от способа отключения ValidateRequest.