如何在允许其他人的同时限制HTML元素

时间:2012-01-08 21:55:09

标签: asp.net-mvc-3 model-view-controller

如何仅在文本框中允许某些html标记

示例:

    <Strong>
    <p>

以下代码是我尝试在创建的类中实现解决方案的地方。

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

我将如何实施解决方案,是否可以在上面编写(代码)。

4 个答案:

答案 0 :(得分:1)

首先,您需要使用[ValidateInput(false)]属性禁用对您的操作的验证,但您需要仔细使用它,因为它将关闭整个方法的验证。您还可以禁用特定属性的验证,如:

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

ASP.NET MVC3具有内置属性以禁用属性级别的验证 - 因此在模型或视图模型中的属性上放置[AllowHtml]属性将禁用请求验证。这不安全,会使您的网站面临风险。现在由您来确保提供正确的数据格式,因此您可能不会尝试使用正则表达式来过滤掉除了您需要的标签之外的所有HTML代码。你可能不想看看这个答案Regex to match all HTML tags except <p> and </p>让你前进。 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]而不是&lt; b&gt;

使用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 :(得分:1)

以下正则表达式仅允许指定的Html标记:

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

这允许输入html <p> </p> <strong> </strong>,同时不允许任何其他标记。

如果需要,添加其他标签。

答案 2 :(得分:0)

使用AllowHtml属性,然后使用IValidatableObject和Regex验证内容, 或编写自定义验证属性以仅允许一些带有正则表达式的html标签,请参阅Phil Haack文章http://haacked.com/archive/2009/11/19/aspnetmvc2-custom-validation.aspx

答案 3 :(得分:0)

[RegularExpression("^[^<>,<|>]+$", ErrorMessage = "Invalid entry.")]
public string FirstName { get; set; }

避免mvc错误。