По умолчанию Razor будет кодировать все, что пишет, а не все на странице. Поскольку Razor воспринимает текст внутри тегов P как HTML, он не будет кодировать его.
Посмотрите на следующий пример, чтобы лучше понять разницу:
<p>this is a test Paragraph for both Development & Production</p>
@{var body = "this is a test Paragraph for both Development & Production";}
<p>@body</p>
@{var body2 = new HtmlString("this is a test Paragraph for both Development & Production");}
<p>@body2</p>
Если вы отобразите эту страницу, вы заметите, что первый абзац не закодирован, тогда как второй абзац будет закодирован, поскольку он кодирует выходные данные переменной. Затем третий пример выдаст тот же вывод, что и первый, так как он использует специальную строку HtmlString, которая предполагает, что ввод безопасен.
Для справки, вот вывод из Razor:
<p>this is a test Paragraph for both Development & Production</p>
<p>this is a test Paragraph for both Development & Production</p>
<p>this is a test Paragraph for both Development & Production</p>