2011-12-06 20 views
7

Czy istnieje sposób użycia pomocnika TextBoxFor z zakodowanym tekstem?MVC3 TextBoxFor z zakodowanym tekstem

np Przy użyciu poniższego pomocnika MVC3 brzytwa widok silnika:

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

a wartość model.Description kodowanego, na przykład:

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

wynik jest pole tekstowe z zakodowanym łańcuchem, , gdy pożądanym wynikiem jest pole tekstowe z dekodowanym ciągiem znaków:

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

Czy istnieje sposób, aby użyć MVC TextBoxFor z zakodowanym ciągiem zamiast korzystania

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

?

+1

Wydaje mi się, że może być ponad-kodowania rzeczy gdzieś. Dlaczego treść jest zakodowana w bazie danych? Zasadniczo powinno to * nie * być: kodować podczas wyświetlania, w przypadkach, w których chronisz się przed wstrzyknięciem. Kodowanie podczas zapisywania i dekodowania podczas edycji jest obarczone błędami i komplikacjami. –

+0

To prawda, że ​​masz rację, ale dobrze jest wiedzieć, że dane są zapisywane w zakodowanej bazie danych. Zgaduję, że druga metoda z @ html.TextBox jest najlepszym rozwiązaniem na razie. – Erann3

Odpowiedz

5

Musisz odszyfrować kod HTML.

Do tego należy użyć System.Web.HttpUtility.HtmlDecode.

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

spowoduje

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

TextBoxFor nie obsługuje tak, masz 2 opcje

1. Dekodowanie przed wyświetlaczem

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

2. Zastosowanie @ Html.TextBox dla tego

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

nadzieję, że to pomaga

+0

Dziękuję za odpowiedź, ale dwie opcje nie różnią się zbytnio od tego, co sugerowałem, najprawdopodobniej najbliżej na razie. – Erann3