как ограничить элементы HTML, позволяя другим - PullRequest
2 голосов
/ 09 января 2012

Как разрешить только определенные HTML-теги в текстовом поле

Пример:

    <Strong>
    <p>

В приведенном ниже коде я пытался реализовать решение в созданном классе.

[Required]
(Code)
Public string car { get; set; }

Как мне поступить с реализацией решения и возможно ли это в том месте, где (код) написано выше.

Ответы [ 4 ]

1 голос
/ 09 января 2012

Во-первых, вам необходимо отключить действие проверки для вас с атрибутом [ValidateInput (false)], но вам нужно будет использовать его осторожно, так как это отключит проверку для всего метода.Вы также можете отключить проверку для определенного атрибута, например:

[Required]
[AllowHtml]
Public string article { get; set; }

ASP.NET MVC3 имеет встроенный атрибут для отключения проверки на уровне свойств - поэтому добавление атрибута [AllowHtml] для свойств в модели или модели представления будетотключить проверку запроса.Это небезопасно и подвергает ваш сайт риску.Теперь вам нужно убедиться, что предоставлен правильный формат данных, так что вы можете не попробовать Regular Expressions отфильтровать весь HTML-код, кроме необходимых вам тегов.Возможно, вы не захотите взглянуть на этот ответ Regex, чтобы соответствовать всем тегам HTML, за исключением

и

, чтобы вы могли продолжить работу.пример из msdn о том, как использовать проверку регулярных выражений с аннотациями данных:

public class Customer
{
  [Required]
  [RegularExpression(@"^[a-zA-Z''-'\s]{1,40}$", 
      ErrorMessage="Numbers and special characters are not allowed in the last name.")]
  public string LastName { get; set; }
}

http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.regularexpressionattribute(v=vs.95).aspx

, вы также можете попробовать более безопасный способ - реализовать функцию, подобную BBCode.Поэтому вместо HTML-тегов вы используете псевдо-HTML-теги, такие как [b] вместо

, это легко сделать с помощью jQuery:

при условии, что #text - это поле, заполненное кодом bbcode, например, текстом(не видно), а text2 - это отформатированный дисплей - видимый:

$(document).ready(function(){
    var text = $('#text').html();
    text = text.replace("[b]","<b>");
    text = text.replace("[/b]","</b>");
    $('#text2').html(text);
});

Это не самый умный код, но он быстро показал вам направление, в котором вы можете выбрать.

1 голос
/ 14 января 2012

Следующее регулярное выражение допускает только указанные теги Html:

[RegularExpression(@"^([^<]|<p>|</p>|<strong>|</strong>|a z|A Z|1 9|(.\.))*$")}

Это позволяет вводить html <p> </p> <strong> </strong>, не допуская других тегов.

При необходимости добавьте другие теги.

0 голосов
/ 20 декабря 2013
[RegularExpression("^[^<>,<|>]+$", ErrorMessage = "Invalid entry.")]
public string FirstName { get; set; }

Чтобы избежать ошибки mvc.

0 голосов
/ 09 января 2012

использовать атрибут AllowHtml, а затем проверить содержимое с помощью IValidatableObject и Regex, или напишите пользовательский атрибут проверки, чтобы разрешить только некоторые html-теги с Regex, см. статью Phil Haack http://haacked.com/archive/2009/11/19/aspnetmvc2-custom-validation.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...