2017-01-22 2 views
0

Я знаю, что мы используем символ @ для переключения между C# код и HTML код, но код, как это показано ниже:вид бритвы с помощью @ в ASP.NET

@for (int i = 1; i <= 10; i++) 
{ 
    @i 
} 

почему же мы до сих пор место @ до того, как я @ я? Поскольку здесь нет элемента html, поэтому нет переключения, а i - это код C#, если мы просто используем «i» вместо «@i», мы должны получить тот же результат?

Другой вопрос:

@for (int i = 1; i <= 10; i++) 
{ 
    <b>@i</b> 
    if (i % 2 == 0) 
    { 
     <text> - Even </text> 
    } 
    else 
    { 
     <text> - Odd </text> 
    } 
    <br /> 
} 

почему нам не нужно размещать @ раньше, если так </б> раньше, если указывает, что ток в режиме HTML, а затем нам нужно сделать, как

@if (i% 2 == 0) 
{ 
    ... 
} 
+0

рядом provideed ответы, которые являются хорошими, Я хочу добавить этот комментарий: когда вы новичок в бритве, иногда бывает сложно. Это потому, что он более умный, чем другие старые синтаксисы ... просто полагайтесь на визуальное оформление студии (цвета, intellisense, .. .) и вы познакомитесь с ним –

ответ

2

В своем первом примере, @i неявное выражение, где вы рассказываете бритвой вывода значения i на этой странице. Удаление @ превратит его в оператор C#, который будет недопустимым синтаксисом.

@i в прилагаемом к вашему тегу <b> также неявное выражение.

Теперь ваш if в вашем блоке for не нуждается в @, так как он находится внутри блока кода for. Если это не так, вам нужно добавить один перед ним (т. Е. @if ...).

Список литературы:

+0

Боковое примечание: вы также можете посыпать '@' рядом с переменными везде в коде C# без какого-либо эффекта - '@for (var @i = 3; @i <10; @i ++)' - http: //stackoverflow.com/questions/429529/what-does-the-symbol-before-a-variable-name-mean-in-c ... поэтому иногда '@' просто «на знаке» без какого-либо дополнительного воздействия (этот случай фактически влияет на поведение Razor, как показано в ответе) –

1

В представлении Бритва двигателя @ символ используется для записи встроенный C# код в HTML-коде походит на смешивание C# и HTML-код для создания шаблона.

Вопрос 1 - Ans:

@for (int i = 1; i <= 10; i++) 
{ 
    @i 
} 

В приведенном выше фрагменте кода, HTML текст будет помещен непосредственно в выходной поток, так как он оказывает значение i непосредственно в HTML.

без @i код не действителен, так как только i в C# недопустим ни в кодах, ни в HTML, поэтому вы получите ошибку компиляции при анализе вида Razor.

Quoestion 2 - Ans:

@for (int i = 1; i <= 10; i++) 
{ 
    <b>@i</b> 
    if (i % 2 == 0) 
    { 
     <text> - Even </text> 
    } 
    else 
    { 
     <text> - Odd </text> 
    } 
    <br /> 
} 

Вид двигателя Razor достаточно умен, чтобы знать, является ли встроенный C# код действителен или нет, когда он разбирает его.

Что здесь происходит, так это то, что встроенный блок кода запускается с использованием знака @ позже любого действительного кода C#, не обязательно должен иметь знак @ перед ним, поскольку он уже находится внутри встроенного блока кода, теперь просто должным образом закрывая HTML-теги или записывая правильный HTML, механизм просмотра Razor отобразит шаблон соответствующим образом.

Если вы хотите визуализировать переменную C# внутри элемента HTML, то вам снова нужно использовать знак @, потому что встроенный блок кода разбивается на тег HTML и затем снова повторяется после этого элемента HTML.

0

В бритве, @ используется для двух различных целей:

  • Для обозначения начала блока кода. Это как <%%> в веб-формах.

  • Для обозначения встроенных выражений. Это как <%:%> в веб-формах.

первый вопрос
@for {...} обозначают для блока кода, @i обозначают для выражения инлайн, говоря бритвой вывода значения I на странице ,
Если вы не ставите @ перед i, ваш код будет превращен в недействительный синтаксис.

второй вопрос
Нам нужно поместить @ перед тем I в выражении @i, потому что это выражение рядный, рассказав бритвой вывода значения я с жирным шрифтом на странице.
Однако на следующем операторе, нам не нужно размещать @ перед тем если, потому что она по-прежнему внутри блока кода @for {...}

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