Проблема в том, что когда это будет опубликовано на сервере, оно не будет работать, неважно, что вы пытаетесь. Это защита ASP.NET XSS, которую можно отключить следующим образом:
<%@ Page ... ValidateRequest="false" %>
Проблема в том, что вам нужно быть очень осторожным, проверяя всю обратную передачу самостоятельно. Более простой способ - экранировать все содержимое текстового поля, используя JavaScript перед публикацией. Вы можете избежать этого, используя тот же HTML-код, а затем удалить его в коде на стороне сервера.
Обновление:
Пример побега. Это будет мигать измененный текст на экране перед обратной передачей - идеальное решение состоит в том, чтобы использовать скрытое поле для этого, то есть назначить значение для скрытого поля, а не того же поля. Это самая простая версия:
<script>
function EscapeField(){
document.getElementById("your client control ID").value =
escape(document.getElementById("your client control ID").value);
}
</script>
И в коде позади:
this.ClientScript.RegisterOnSubmitStatement(this.GetType(),
"EscapeField", "EscapeField();")
Обновление:
Опять же, предупреждение - если вы сохраните HTML-код в своей базе данных таким образом, а затем просто отобразите его клиенту, вы напрямую уязвимы для атак XSS. Есть черви, которые найдут и используют ваш веб-сайт. Убедитесь, что вы очищаете полученный HTML-код.