2013-04-09 76 views
0

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

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

现在我可以拯救一切thourgh该文本框,但数据显示,当我看到奇怪的字符。所以,当我保存<script>alert(“Boo!”)</script>,并再次打开该网站看到的结果,我看到:<脚本>警报(“嘘!”)< /脚本>

我怎样才能解决这个问题?

注意:我不在我的代码中的其他地方编码输入。

+1

节省''然后就看到'' , 有什么问题? – Lars 2013-04-09 07:43:07

+0

对不起,我不知道如何把它放在这里,我看到奇怪的字符,如&lt;&g – Djave 2013-04-09 07:48:59

回答

0

如果你想看到<而不是&lt;,使用 HttpUtility.HtmlDecode

如果你保存在数据库中的用户输入,并希望他们允许在存入数据库之前输入html,将他们的输入编码在您的控制器中:

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

而当你想dispaly该输入,在你视图解码中:

@HttpUtility.HtmlDecode(model.Input) 

而不是ValidateInputAttribute设置为false,用于输入属性[AllowHtml]属性,在模式

[Required] 
[AllowHtml] 
public string Input {get; set;} 
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

+0

或者只是[Html.Raw()](http://msdn.microsoft.com/zh-cn/library/gg480740 (v = vs.98)的.aspx) – Lars 2013-04-09 08:11:14