2013-08-01 5 views
1

Я искал, как смешивать бритву и JavaScript вместе. Я нашел что-то вроде этого:Смешивание синтаксиса JavaScript и Razor

<script type="text/javascript"> 
var currentUser = null; 
@if (User.Identity.IsAuthenticated) { 
    <text> 
     currentUser = '@User.Identity.Name'; 
    </text> 
} 
</script> 

Почему переменная называется currentUser окружена <text></text> теге? В чем смысл тега <text>? Если мы опустим этот текстовый тег, произойдет ли какая-либо ошибка?

+1

Почему бы не попробовать? –

+0

взгляните на http://stackoverflow.com/questions/17419111/mixing-razor-syntax-with-javascript-in-views/17419419#17419419 – Kek

+0

Это не вопрос. _ «Что произойдет, если ...» _. **Попробуй**. У вас есть код перед вами, вы можете проверить его. StackOverflow не является компилятором краудсорсинга. По крайней мере, вы можете показать, что вы готовы учиться и пытаетесь понять проблему. Вы могли бы выполнить поиск, где бы вы нашли [как использовать текстовый тег в бритве MVC 3) (http://stackoverflow.com/questions/4969065/how-to-use-text-tag-in-mvc- 3-бритва). – CodeCaster

ответ

1

Ну, вот как работает бритва. Он использует скобки и теги начинают/конец differenciate C# код из сгенерированного HTML

При открытии скобки, то он считается кодом до:

  • соответствующей закрывающая скобка не encounterd
  • открыт тег ,

Затем открытый тег будет считаться html до тех пор, пока не будет встречен закрывающий тег @ или correspoding. Иногда вы хотите переключиться с C# на HTML (или js), но вы не хотите добавлять тег ... тогда для вас есть специальный идентификатор тега. Это не отображается, просто здесь, чтобы сообщить бритву, чтобы переключить rom C# на сгенерированный вывод

1

Причина для тегов <text>…</text> заключается в решении проблемы двусмысленностей, возникающих в результате смешивания двух языков вместе, которые семантически идентичны в много случаев.

Если бы вы указали динамическую java-скриптовую логику в инструкциях C# if синтаксиса Razor, и у вас был java-скрипт, если в этих блоках были указаны выражения, как бы он отличал контекст между этими двумя?

Проблема в том, что она не может; шансы, программисты тоже не могут. Тег <text>…</text> - это специальный блок Razor (только внутри блоков C#), который говорит: это определенно (возможно) не код C#, который находится в этом блоке.

Все становится немного рискованным, когда вы понимаете, что можете добавить еще один побег внутри блока <text>…</text>. Как и все, хотя вы будете использовать его с осторожностью. Если у вас возникли проблемы с смешиванием двух, и вы не можете понять, где добавить текстовые блоки, вероятность того, что вы не будете использовать его (на производстве), пока не поймете это лучше.

Смежные вопросы