Comment déclarer une variable locale dans Razor?

354

Je développe une application Web dans asp.net mvc 3. Je suis très nouveau dans ce domaine. Dans une vue utilisant le rasoir, je voudrais déclarer certaines variables locales et les utiliser sur toute la page. Comment cela peut-il être fait?

Il semble assez trivial de pouvoir effectuer l'action suivante:

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

Mais ça ne marche pas. Est-ce possible?

vondip
la source

Réponses:

522

Je pense que vous étiez assez proche, essayez ceci:

@{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
la source
oh sacrément, j'essayais toutes les solutions possibles, mais ça. Merci Tomas!
vondip
Comment faites-vous cela dans VB.NET?
Stefan Paul Noack
7
oh, je l'ai découvert moi-même: @Code .. End Codeau lieu de@{ .. }
Stefan Paul Noack
1
@ Abhijeet.Nagre, dans la question qu'il écrit: @bool isUserConnected = string.IsNullOrEmpty(Model.CreatorFullName);mais la définition des variables doit être à l'intérieur d'un "bloc de code". Je ne peux pas donner une meilleure réponse à pourquoi alors cela, c'est juste comment fonctionne le rasoir.
Tomas Jansson le
2
@AbhijeetNagre - Razor est généralement assez bon pour comprendre où commence et se termine le code, mais ce n'est pas parfait. Parfois, nous devons simplement lui donner un petit indice sur ce qui devrait être traité comme Razor / C #, et ce qui ne devrait pas l'être. Si vous obtenez une erreur Razor, l'ajout de { }balises est généralement la première étape
Jon Story
50

Je pense que la variable devrait être dans le même bloc:

@{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
la source
Cela semble être le cas, dans MVC3 au moins.
Matthew Walton
1
Excellent! Avez-vous une idée de la façon dont vous utiliseriez à isUserConnectednouveau la variable plus bas dans la page?
SharpC
@SharpC Une fois que vous avez déclaré une variable comme celle-ci, elle est disponible dans le reste de ce fichier .cshtml. Plus tard dans le fichier, vous pourriez faire quelque chose comme @if (isUserConnected) { /* stuff if connected */ }ou <div>Connected? @isUserConnected</div>(cela fonctionne mieux avec des chaînes). Il n'est cependant pas disponible en dehors de ce fichier (par exemple, vous devrez le déclarer séparément en partiels).
Dan Mangiarelli
18

Vous pouvez aussi utiliser:

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

Pas besoin de variable dans le code

Marcel
la source
6
Cela ne fournit pas de réponse à la question.
Owen Pauling
13

Si vous recherchez une variable int, qui s'incrémente au fur et à mesure que le code boucle, vous pouvez utiliser quelque chose comme ceci:

@{
  int counter = 1;

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

Pas une réponse directe au problème d'OP, mais cela peut aussi vous aider. Vous pouvez déclarer une variable locale à côté de certains html à l'intérieur d'une portée sans problème.

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

    <li><a href="@item.Source">@file.Name</a></li>
}
aloisdg passe à codidact.com
la source
c'est ce que je cherchais merci !!
Ninjanoel
2

pour déclarer un var à accéder à travers la page. En haut de la page, cela fonctionne généralement. Implicitement ou explicitement votre choix.

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


            @something1 //to display on the page
            @something2 //to display on the page
d384
la source
1

vous pouvez tout mettre dans un bloc et écrire facilement le code que vous souhaitez dans ce bloc exactement le code ci-dessous:

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

cela vous aide à avoir au début un code plus propre et vous pouvez également empêcher votre page de charger plusieurs fois différents blocs de codes

sajadre
la source