MVC3 TextBoxFor с закодированным текстом

Есть ли способ использовать помощник TextBoxFor с закодированным текстом?

например: при использовании следующего помощника MVC3 с механизмом просмотра Razor:

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

и значение model.Description кодируется, например:

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

результатом является текстовое поле с закодированной строкой, когда желаемым результатом является текстовое поле с декодированной строкой:

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

Есть ли способ использовать MVC TextBoxFor с закодированной строкой вместо использования

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

?


person Erann3    schedule 06.12.2011    source источник
comment
Мне кажется, что вы можете где-то перекодировать. Почему контент закодирован в базе данных? В общем, должно быть не: вы должны кодировать при отображении, в тех случаях, когда вы защищаете от внедрения. Кодирование при сохранении и декодирование при редактировании чревато ошибками и сложностями.   -  person Andrew Barber    schedule 06.12.2011
comment
Я думаю, что вы правы, но полезно знать в случаях, когда данные сохраняются в базе данных в закодированном виде. я предполагаю, что другой метод с @html.TextBox - лучшее решение на данный момент.   -  person Erann3    schedule 07.12.2011


Ответы (1)


Вы должны html-декодировать вашу строку.

Используйте для этого System.Web.HttpUtility.HtmlDecode.

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

приведет к

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

TextBoxFor не поддерживает это, поэтому у вас есть 2 варианта.

<сильный>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))

надеюсь, это поможет

person dknaack    schedule 06.12.2011
comment
Спасибо за ответ, но два варианта не сильно отличаются от того, что я предложил, возможно, это самое близкое решение на данный момент. - person Erann3; 07.12.2011