2013-04-09 129 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