¿Cómo declarar una variable local en Razor?

354

Estoy desarrollando una aplicación web en asp.net mvc 3. Soy muy nuevo en ella. En una vista que usa navaja, me gustaría declarar algunas variables locales y usarlas en toda la página. ¿Cómo se puede hacer esto?

Parece bastante trivial poder realizar la siguiente acción:

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

Pero esto no funciona. es posible?

vondip
fuente

Respuestas:

521

Creo que estabas bastante cerca, prueba esto:

@{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>
}
Tomás Jansson
fuente
oh maldita sea, estaba intentando todo lo posible pero esto. Gracias tomas!
vondip
¿Cómo se hace esto en VB.NET?
Stefan Paul Noack
77
oh, lo descubrí por mí mismo: en @Code .. End Codelugar de@{ .. }
Stefan Paul Noack
1
@ Abhijeet.Nagre, en la pregunta que escribe: @bool isUserConnected = string.IsNullOrEmpty(Model.CreatorFullName);pero la definición variable debe estar dentro de un "bloque de código". No puedo dar una mejor respuesta a por qué entonces eso, es cómo funciona la maquinilla de afeitar.
Tomas Jansson
2
@AbhijeetNagre - Razor suele ser bastante bueno para entender dónde comienza y dónde termina el código, pero no es perfecto. A veces solo tenemos que darle una pequeña pista sobre lo que se debe tratar como Razor / C # y lo que no. Si alguna vez recibe un error de Razor, agregar { }etiquetas suele ser el primer paso
Jon Story
50

Creo que la variable debería estar en el mismo bloque:

@{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
fuente
Ese parece ser el caso, al menos en MVC3.
Matthew Walton el
1
¡Excelente! ¿Alguna idea de cómo usaría la variable isUserConnectednuevamente más abajo en la página?
SharpC
@SharpC Una vez que declara una variable como esa, está disponible en el resto de ese archivo .cshtml. Más adelante en el archivo, podría hacer algo como @if (isUserConnected) { /* stuff if connected */ }o <div>Connected? @isUserConnected</div>(esto funciona mejor con cadenas). Sin embargo, no está disponible fuera de ese archivo (por ejemplo, tendrá que declararlo por separado en parciales).
Dan Mangiarelli
18

También puedes usar:

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

No hay necesidad de una variable en el código

marcel
fuente
66
Esto no proporciona una respuesta a la pregunta.
Owen Pauling
13

Si está buscando una variable int, una que se incremente a medida que el código se repite, puede usar algo como esto:

@{
  int counter = 1;

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

No es una respuesta directa al problema de OP, pero también puede ayudarlo. Puede declarar una variable local junto a algunos html dentro de un ámbito sin problemas.

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

    <li><a href="@item.Source">@file.Name</a></li>
}
aloisdg se muda a codidact.com
fuente
esto es lo que estaba buscando gracias !!
Ninjanoel el
2

para declarar que se debe acceder a una var a través de la página. En la parte superior de la página, generalmente funciona. Implícita o explícitamente su elección.

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


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

puede poner todo en un bloque y escribir fácilmente cualquier código que desee en ese bloque exactamente con el siguiente código:

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

le ayuda a tener al principio un código más limpio y también puede evitar que su página se cargue muchas veces con diferentes bloques de códigos

sajadre
fuente