2011-12-06 56 views
7

有沒有辦法使用TextBoxFor助手與編碼文本?MVC3 TextBoxFor帶有編碼文本

例如: 當使用MVC3下列輔助剃刀視圖引擎:

@Html.TextBoxFor(model => model.Description) 

和model.Description的值被編碼,例如:

<script>alert();'</script> 

結果文本框中的編碼字符串, 當通緝的結果是帶有解碼字符串的文本框時:

<script>alert();'</script> 

是否有使用MVC TextBoxFor與編碼字符串,而不是使用

@Html.TextBox("Description", Server.HtmlDecode(Model.Description)) 

的方法嗎?

+1

它看起來像你對我可能是在編碼東西的地方。爲什麼數據庫中編碼的內容?一般來說,它不應該是:在顯示的時候應該編碼,以防止注射。在編輯時存儲和解碼時編碼充滿了錯誤和複雜性。 –

+0

我說你是對的,但在數據被保存到編碼數據庫的情況下很好知道。我猜測,與@ html.TextBox的另一種方法是現在最好的解決方案。 – Erann3

回答

5

你必須html解碼你的字符串。使用System.Web.HttpUtility.HtmlDecode

System.Web.HttpUtility.HtmlDecode("&lt;script&gt;alert();&#39;&lt;/script&gt;") 

將導致

<script>alert();'</script> 

TextBoxFor不支持的話,你有兩個選擇

1,顯示之前解碼

@{ 
     Model.Description = System.Web.HttpUtility.HtmlDecode(Model.Description); 
    } 
    @Html.TextBoxFor(model => model.Description) 

2.使用@ Html.TextBox爲此

@Html.TextBox("Description", System.Web.HttpUtility.HtmlDecode(Model.Description)) 

希望這有助於

+0

感謝您的回覆,但這兩個選項與我所建議的並無太大區別,現在就探索最接近的解決方案。 – Erann3