Эквивалентный бритвенный синтаксис следующего высказывания? - PullRequest
6 голосов
/ 29 августа 2011

Допустим, у меня есть следующий код движка ASP.NET Web Form, как я могу выразить его в движке Razor?

<script type="text/javascript">
    var initialData = <%= new JavaScriptSerializer().Serialize(Model) %>;
</script>

Спасибо Hardy

1 Ответ

5 голосов
/ 29 августа 2011

Я бы использовал следующее:

<script type="text/javascript">
    var initialData = @Html.Raw(new JavaScriptSerializer().Serialize(Model));
</script>

Это точно так же, как ваш пример (обратите внимание на Html.Raw).

Если вы хотите закодировать вывод (html) иливаш код возвращает IHtmlString:

<script type="text/javascript">
    var initialData = @(new JavaScriptSerializer().Serialize(Model));
</script>

Вы хотите использовать синтаксис @( ... ), потому что использование @new JavaScriptSerializer(..) позволит синтаксическому анализатору Razor остановиться на первом пробеле (после нового).

Синтаксис, подобный этому:

<script type="text/javascript">
    var initialData = @{ new JavaScriptSerializer().Serialize(Model); }; @* <== wrong *@
</script>

не работает, потому что он вызовет new JavaScriptSerializer, но отбрасывает вывод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...