MVC 3 DataAnnotations: не разрешать HTML - PullRequest
3 голосов
/ 11 июня 2011

Есть ли возможность использовать DataAnnotations в MVC 3, чтобы запретить использование HTML в текстовом поле? Я вижу способ разрешить использование HTML (AllowHTMLAttribute), но что, если я не хочу, чтобы пользователь вводил какой-либо HTML-код в текстовое поле, и хочу предупредить его?

Спасибо:)

Ответы [ 3 ]

5 голосов
/ 11 июня 2011

Вы должны написать собственный RegularExpressionAttribute ... что-то вроде этого:

public class DisallowHTMLAttribute : RegularExpressionAttribute
{
    public DisallowHTMLAttribute()
        : base(@"</?\w+((\s+\w+(\s*=\s*(?:"".*?""|'.*?'|[^'"">\s]+))?)+\s*|\s*)/?>")
    {
    }

    public override string FormatErrorMessage(string name)
    {

        return String.Format("The field {0} cannot contain html tags", name);

    }
}

Вы должны зарегистрировать адаптер, чтобы включить проверку на стороне клиента, поэтому в Application_Start в Global.asax добавьте следующую строку кода:

DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(DisallowHTMLAttribute), typeof(RegularExpressionAttributeAdapter));

И в вашей модели добавьте атрибут к свойствам, которые вы хотите запретить HTML-тегам, например:

[DisallowHTML]
public string SomeProperty{ get; set; }
0 голосов
/ 12 июня 2011

Экранирования текста пользователя при его отображении может быть достаточно. Что если пользователь захочет опубликовать образец HTML / XML?

<%: Model.UsersContent%>

0 голосов
/ 11 июня 2011

Вы можете установить [ValidateInput(true)] на действие контроллера

...