Как объявить локальную переменную в Razor?

354

Я занимаюсь разработкой веб-приложения на asp.net mvc 3. Я очень новичок в этом. В представлении, использующем бритву, я хотел бы объявить некоторые локальные переменные и использовать их по всей странице. Как это может быть сделано?

Кажется довольно тривиальным сделать следующее действие:

@bool isUserConnected = string.IsNullOrEmpty(Model.CreatorFullName);
@if (isUserConnected)
{ // meaning that the viewing user has not been saved
    <div>
        <div> click to join us </div>
        <a id="login" href="javascript:void(0);" style="display: inline; ">join</a>
    </div>
}

Но это не работает. Это возможно?

vondip
источник

Ответы:

522

Я думаю, что вы были довольно близки, попробуйте это:

@{bool isUserConnected = string.IsNullOrEmpty(Model.CreatorFullName);}
@if (isUserConnected)
{ // meaning that the viewing user has not been saved so continue
    <div>
        <div> click to join us </div>
        <a id="login" href="javascript:void(0);" style="display: inline; ">join here</a>
    </div>
}
Томас Янссон
источник
о черт, я пробовал все возможные варианты, кроме этого. Спасибо, Томас!
vondip
Как вы делаете это в VB.NET?
Стефан Пол Ноак
7
о, я выяснил это сам: @Code .. End Codeвместо@{ .. }
Стефан Пол Ноак
1
@ Abhijeet.Nagre, в вопросе, который он пишет: @bool isUserConnected = string.IsNullOrEmpty(Model.CreatorFullName);но определение переменной должно быть внутри «блока кода». Я не могу дать лучший ответ, почему тогда это так, просто, как работает бритва.
Томас Янссон
2
@AbhijeetNagre - Razor обычно неплохо понимает, где начинается и заканчивается код, но он не идеален. Иногда нам просто нужно дать небольшой совет относительно того, что следует рассматривать как Razor / C #, а что нет. Если вы когда-либо получаете ошибку Razor, добавление { }тегов обычно является первым шагом
Jon Story
50

Я думаю, что переменная должна быть в том же блоке:

@{bool isUserConnected = string.IsNullOrEmpty(Model.CreatorFullName);
    if (isUserConnected)
    { // meaning that the viewing user has not been saved
        <div>
            <div> click to join us </div>
            <a id="login" href="javascript:void(0);" style="display: inline; ">join</a>
        </div>
    }
    }
Khasha
источник
Это похоже на случай, по крайней мере, в MVC3.
Мэтью Уолтон,
1
Отлично! Любая идея, как вы будете использовать переменную isUserConnectedснова вниз по странице?
SharpC
@SharpC Как только вы объявите переменную, подобную этой, она станет доступной в остальной части этого файла .cshtml. Позже в файле вы можете сделать что-то вроде @if (isUserConnected) { /* stuff if connected */ }или <div>Connected? @isUserConnected</div>(это лучше работает со строками). Однако он недоступен за пределами этого файла (например, вам придется объявить его отдельно в партиалах).
Дэн Манджарелли
18

Вы также можете использовать:

@if(string.IsNullOrEmpty(Model.CreatorFullName))
{
...your code...
}

Нет необходимости в переменной в коде

завивать волосы щипцами
источник
6
Это не дает ответа на вопрос.
Оуэн Полинг
13

Если вы ищете переменную типа int, которая увеличивается по мере зацикливания кода, вы можете использовать что-то вроде этого:

@{
  int counter = 1;

  foreach (var item in Model.Stuff) {
    ... some code ...
    counter = counter + 1;
  }
} 
Брайан
источник
12

Не прямой ответ на проблему ОП, но это может помочь и вам. Вы можете объявить локальную переменную рядом с некоторым html внутри области видимости без проблем.

@foreach (var item in Model.Stuff)
{
    var file = item.MoreStuff.FirstOrDefault();

    <li><a href="@item.Source">@file.Name</a></li>
}
aloisdg переходит на codidact.com
источник
это то, что я искал, спасибо !!
Ninjanoel
2

объявить переменную для доступа к странице. В верхней части страницы обычно это работает. Неявный или явно ваш выбор.

          @{
               //implicit
               var something1 = "something";
               //explicit
               string something2 = "something";
          }


            @something1 //to display on the page
            @something2 //to display on the page
d384
источник
1

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

@{
        bool isUserConnected = string.IsNullOrEmpty(Model.CreatorFullName);
        if (isUserConnected)
        { // meaning that the viewing user has not been saved
            <div>
                <div> click to join us </div>
                <a id="login" href="javascript:void(0);" style="display: inline; ">join</a>
            </div>
        }
    }

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

sajadre
источник