MVC编码字符串

时间:2013-04-09 07:35:08

标签: asp.net-mvc c#-4.0

我将控制器操作中的ValidateInputAttribute设置为false。在我看来,我有一个文本框:

<p>
    <%= Html.TextBoxFor(m => m.Name.LastName, new { maxlength = "100" })%> 
    <%= Html.ValidationMessageFor(m => m.Name.LastName) %>
    <%= Html.Hidden("hiddenLastName", Model.Name.LastName) %>
</p>

现在我可以保存文本框中的所有内容,但在显示数据时,我会看到奇怪的字符。因此,当我保存<script>alert(“Boo!”)</script>并再次打开网站以查看结果时,我会看到:&lt; script&gt; alert(“Boo!”)&lt; / script&gt;

我该如何解决这个问题?

注意:我没有在我的代码中的其他地方对输入进行编码。

2 个答案:

答案 0 :(得分:0)

它是编码的字符串。如果脚本标记可以攻击您的站点,那么这个转换为Html编码字符串的字符串是安全的。但是如果要显示带有标记元素的未编码字符串,请使用HtmlString。

HtmlString htmlString = new HtmlString("rawString"); 
String encodedString = htmlString.ToHtmlString();
String not_encodedString = htmlString.ToString();

这里是msdn链接: http://msdn.microsoft.com/en-us/library/system.web.htmlstring.aspx

答案 1 :(得分:0)

如果您想要<而不是&lt;,请使用 HttpUtility.HtmlDecode

如果您要在数据库中保存用户输入并希望它们允许输入html,请在存储到数据库中之前在控制器中对其输入进行编码:

model.Input = HttpUtility.HtmlEncode(model.Input);

如果您想显示该输入,请在视图中解码:

@HttpUtility.HtmlDecode(model.Input)

而不是将ValidateInputAttribute设置为false,在模型中对Input属性使用[AllowHtml]属性:

[Required]
[AllowHtml]
public string Input {get; set;}