Почему Razor не нравится это? - PullRequest
16 голосов
/ 07 ноября 2011

У меня проблема с мега-раздражением, с которой у меня открывается вид:

@{

        if(ViewBag.Section == "Home")
        {
           <div id="headerfrontPage">   
        }
        else
        {
            <div id="header">   
        }


     }

И я получаю ошибку компиляции:

В блоке кода отсутствует закрывающий "}"персонаж.Убедитесь, что у вас есть соответствующий символ «}» для всех символов «{» в этом блоке, и что ни один из символов «}» не интерпретируется как разметка.

Как условно написатьDiv?Это для взлома в основном ...

Ответы [ 5 ]

22 голосов
/ 07 ноября 2011

Вы можете использовать ту же конструкцию, когда оборачиваете внутренний элемент вашего div, как:

@if (ViewBag.Section == "Home")
{
    <text><div id="headerfrontPage"></text>
}
else
{
    <text><div id="header"></text>
}

Или вы используете синтаксис бритвы @: как

@if (ViewBag.Section == "Home")
{
    @:<div id="headerfrontPage">
}
else
{
    @:<div id="header">
}

Но для вашей текущей ситуации я бы предпочел решение Рона Сийма:

@{
var divName = ViewBag.Section == "Home" ? "headerfrontPage" : "header";
}

<div id="@divName"> 
9 голосов
/ 07 ноября 2011

Я подозреваю, что это потому, что ваши div не закрыты, поэтому бритва предполагает, что закрывающая скобка на самом деле является частью содержимого div.

Вы можете попытаться вывести все содержимое div внутри вашего кода, включая закрывающий тег, или вывести тег div с помощью Response.Write или чего-то подобного, чтобы не было запутанной разметки.

РЕДАКТИРОВАТЬ: также, возможно, заключая ваш тег div в

<text></text>

стоит попробовать.

7 голосов
/ 07 ноября 2011

Вы можете попробовать это:

@{
string divName;

    if(ViewBag.Section == "Home")
    {
       divName = "headerfrontPage";
    }
    else
    {
        divName = "header";
    }
}

<div id="@divName"> 

Я не уверен, поможет ли это, это длинный выстрел.Но, по крайней мере, IMO, который выглядит лучше ...

2 голосов
/ 07 ноября 2012

Самый простой способ написать это:

<div id="@(ViewBag.Section == "Home" ? "headerFrontPage" : "header")">

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

@{ var headerID = ViewBag.Section == "Home" ? "headerFrontPage" : "header"; }

<div id="@headerID">

Что касается более общего случая незакрытоготеги в блоках кода Razor, вы можете явно пометить открывающий тег как содержимое :

@if (ViewBag.Section == "Home")
{
    @:<div id="headerFrontPage">
}
else
{
    @:<div id="header">
}
2 голосов
/ 07 ноября 2011

Попробуйте это:

@if (ViewBag.Section == "Home")
{
    <text> <div id="headerfrontPage"> </text>
}
else
{
    <text> <div id="header"> </text>
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...