Синтаксис бритвы MVC3. Как мне преобразовать этот стиль ASP.NET в Razor. (также проблемы с @ в кавычках) - PullRequest
1 голос
/ 25 ноября 2010

Может кто-нибудь преобразовать этот синтаксис ASP.NET в синтаксис RAZOR?Я не могу преобразовать его «один в один» в синтаксис Razor.

<% Themes.ThemesAvailable().ForEach(i => 
   {
       if (i.Equals(Themes.ThemeToUse))
       {%>
         <a href="" id="A1" style="font-size:x-large;color:Red"><%:i%></a>
        <%}
       else
       {%>
        <a href="" style="color:Blue" id="ChangeThemeTo_<%:i%>"><%:i%></a>
       <%} %>
    <br />
<% });%>

Следующее не работает (жалуется на CS0201: только присваивание, вызов, приращение, уменьшение и новые выражения объекта могут использоваться какутверждение)

@Themes.ThemesAvailable().ForEach(i => {
       if (i.Equals(Themes.ThemeToUse)){
         @:<a href="" id="A1" style="font-size:x-large;color:Red"> + @i + </a>
       ;}else{
         @:<a href="" style="color:Blue" id='ChangeThemeTo_@i'>@i</a>
       ;}   })

и это не работает (внезапно он ожидает '}' в верхней части страницы line1 col1)

@Themes.ThemesAvailable().ForEach(i => 
   {
       if (i.Equals(Themes.ThemeToUse)){
         @<text><a href="" id="A1" style="font-size:x-large;color:Red"> + @i + </a></text>
        ;} else {
         @<text><a href="" style="color:Blue" id='ChangeThemeTo_@i'>@i</a></text>
       ;}
})

Кажется, @i внутри id = 'ChangeThemeTo_@i 'останавливает работу конечного текстового тега.Если я удаляю '@', элемент работает.Но получите ту же ошибку, что и при первой попытке преобразования (CS0201).

Удаление использования лямбды, это работает, но ТОЛЬКО если я удалю '@' из id = 'ChangeThemeTo_i' @foreach (var i in Themes.ThemesAvailable()){ if (i.Equals(Themes.ThemeToUse)){<br> <a href="" id="A1" style="font-size:x-large;color:Red"> + @i + </a> } else {<br> <a href="" style="color:Blue" id='ChangeThemeTo_i'>@i</a> } }

Ответы [ 2 ]

2 голосов
/ 25 ноября 2010

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

@foreach(var i in Themes.ThemesAvailable()) 
{
    if (i.Equals(Themes.ThemeToUse))
    {
        <text><a href="" id="A1" style="font-size:x-large;color:Red"> + @i + </a></text>
    } 
    else 
    {
       <text><a href="" style="color:Blue" id='ChangeThemeTo_@i'>@i</a></text>
    }
}

Редактировать

Для вашей последней проблемы, когда он неправильно записывает атрибуты id, попробуйте использовать string.Format вместо:

<a href="" style="color:Blue" id="@(string.Format("ChangeThemeTo_{0}", i))">@i</a>

Или просто объединить их:

<a href="" style="color:Blue" id="@("ChangeThemeTo_" + i)">@i</a>
0 голосов
/ 25 ноября 2010

Так что, очевидно, вам нужен текст перед кодом, чтобы заставить работать анализатор разметки

@foreach(var theme in Themes.ThemesAvailable()) {
    if (theme.Equals(Themes.ThemeToUse))
        <a href="" id="a1" style="font-size:x-large;color:Red">@theme</a>
    else
        <a href="" style="color:Blue" id="ChangeThemeTo_@(theme)">@theme</a>
}

Вышесказанное - это все, что необходимо для работы вашего кода.Причина, по которой вам не нужно использовать тег text, заключается в том, что text - это просто html-тег макета, который выглядит как html, так что он заставляет анализатор перейти в режим html.Поскольку настоящий HTML-тег делает то же самое, вам не нужно использовать текст.Причина, по которой вам нужно использовать @(theme) в вашем теге id для второго тега привязки, вероятно, заключается в том, что он похож на адрес электронной почты, а синтаксическому анализатору предписано игнорировать все, что выглядит как адрес электронной почты.Вы можете проверить это, попробовав ChangeThemeTo_ @theme с пробелом между ними, и вы увидите, что это работает.@() заставляет компилятор распознавать, что находится между (), как код.Я надеюсь, что это поможет вам немного лучше понять синтаксический анализатор.

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