Como declarar uma variável local no Razor?

354

Estou desenvolvendo um aplicativo Web no asp.net mvc 3. Sou muito novo nele. Em uma exibição usando o razor, eu gostaria de declarar algumas variáveis ​​locais e usá-las em toda a página. Como isso pode ser feito?

Parece bastante trivial poder executar a seguinte ação:

@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>
}

Mas isso não funciona. Isso é possível?

vondip
fonte

Respostas:

521

Eu acho que você estava bem perto, tente o seguinte:

@{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>
}
Tomas Jansson
fonte
oh caramba, eu estava tentando todas as soluções possíveis, menos isso. Obrigado Tomas!
vondip
Como você faz isso no VB.NET?
Stefan Paul Noack
7
oh, eu descobri por mim mesmo: em @Code .. End Codevez de@{ .. }
Stefan Paul Noack
11
@ Abhijeet.Nagre, na pergunta que ele escreve: @bool isUserConnected = string.IsNullOrEmpty(Model.CreatorFullName);mas a definição de variável deve estar dentro de um "bloco de código". Não posso dar uma resposta melhor para o porquê disso, é exatamente como a navalha funciona.
Tomas Jansson
2
@AbhijeetNagre - O Razor geralmente é muito bom para entender onde o código começa e termina, mas não é perfeito. Às vezes, precisamos dar uma pequena dica sobre o que deve ser tratado como Navalha / C # e o que não deve. Se você já teve um erro de Navalha, adicionando { }marcas geralmente é o primeiro passo
Jon História
50

Eu acho que a variável deve estar no mesmo bloco:

@{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
fonte
Esse parece ser o caso, pelo menos no MVC3.
Matthew Walton
11
Excelente! Alguma idéia de como você usaria a variável isUserConnectednovamente mais abaixo na página?
SharpC
@ SharpC Depois de declarar uma variável como essa, ela estará disponível no restante do arquivo .cshtml. Posteriormente no arquivo, você pode fazer algo como @if (isUserConnected) { /* stuff if connected */ }ou <div>Connected? @isUserConnected</div>(isso funciona melhor com cadeias). Porém, ele não está disponível fora desse arquivo (por exemplo, você terá que declará-lo separadamente em parciais).
Dan Mangiarelli
18

Você também pode usar:

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

Não há necessidade de uma variável no código

marcel
fonte
6
Isso não fornece uma resposta para a pergunta.
Owen Pauling
13

Se você estiver procurando por uma variável int, que seja incrementada conforme o código em loop, use algo como isto:

@{
  int counter = 1;

  foreach (var item in Model.Stuff) {
    ... some code ...
    counter = counter + 1;
  }
} 
Brian
fonte
12

Não é uma resposta direta ao problema do OP, mas também pode ajudá-lo. Você pode declarar uma variável local ao lado de algum html dentro de um escopo sem problemas.

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

    <li><a href="@item.Source">@file.Name</a></li>
}
aloisdg movendo-se para codidact.com
fonte
isto é o que eu estava procurando obrigado !!
Ninjanoel 23/11/19
2

para declarar um var a ser acessado na página.No topo da página, geralmente funciona. Implícita ou explicitamente sua escolha.

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


            @something1 //to display on the page
            @something2 //to display on the page
d384
fonte
1

você pode colocar tudo em um bloco e escrever facilmente qualquer código que desejar nesse bloco exatamente exatamente o código abaixo:

@{
        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>
        }
    }

ajuda você a ter um código mais limpo e também pode impedir que sua página carregue muitas vezes diferentes blocos de códigos

sajadre
fonte