Wie deklariere ich eine lokale Variable in Razor?

354

Ich entwickle eine Webanwendung in asp.net mvc 3. Ich bin sehr neu darin. In einer Ansicht mit Rasiermesser möchte ich einige lokale Variablen deklarieren und auf der gesamten Seite verwenden. Wie kann das gemacht werden?

Es scheint ziemlich trivial zu sein, die folgende Aktion ausführen zu können:

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

Das funktioniert aber nicht. Ist das möglich?

vondip
quelle

Antworten:

521

Ich denke du warst ziemlich nah dran, versuche das:

@{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
quelle
Oh verdammt, ich habe jede mögliche Arbeit versucht, aber das hier. Danke Tomas!
vondip
Wie macht man das in VB.NET?
Stefan Paul Noack
7
Oh, ich habe es selbst herausgefunden: @Code .. End Codestatt@{ .. }
Stefan Paul Noack
1
@ Abhijeet.Nagre, in der Frage, die er schreibt: Die @bool isUserConnected = string.IsNullOrEmpty(Model.CreatorFullName);Variablendefinition muss sich jedoch in einem "Codeblock" befinden. Ich kann keine bessere Antwort geben, warum dann so, es ist nur, wie Rasiermesser funktioniert.
Tomas Jansson
2
@AbhijeetNagre - Razor versteht normalerweise recht gut, wo Code beginnt und endet, ist aber nicht perfekt. Manchmal müssen wir nur einen kleinen Hinweis geben, was als Razor / C # behandelt werden soll und was nicht. Wenn Sie jemals einen Razor-Fehler erhalten, ist das Hinzufügen von { }Tags normalerweise der erste Schritt
Jon Story
50

Ich denke, die Variable sollte sich im selben Block befinden:

@{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
quelle
Dies scheint zumindest in MVC3 der Fall zu sein.
Matthew Walton
1
Ausgezeichnet! Haben Sie eine Idee, wie Sie die Variable isUserConnecteddann weiter unten auf der Seite erneut verwenden würden?
SharpC
@SharpC Sobald Sie eine solche Variable deklariert haben, ist sie im Rest dieser .cshtml-Datei verfügbar. Später in der Datei könnten Sie so etwas wie @if (isUserConnected) { /* stuff if connected */ }oder tun <div>Connected? @isUserConnected</div>(dies funktioniert besser mit Zeichenfolgen). Es ist jedoch nicht außerhalb dieser Datei verfügbar (z. B. müssen Sie es in Teilabschnitten separat deklarieren).
Dan Mangiarelli
18

Sie können auch verwenden:

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

Keine Notwendigkeit für eine Variable im Code

marcel
quelle
6
Dies gibt keine Antwort auf die Frage.
Owen Pauling
13

Wenn Sie nach einer int-Variablen suchen, die inkrementiert wird, wenn sich der Code wiederholt, können Sie Folgendes verwenden:

@{
  int counter = 1;

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

Keine direkte Antwort auf das Problem von OP, aber es kann Ihnen auch helfen. Sie können problemlos eine lokale Variable neben HTML in einem Bereich deklarieren.

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

    <li><a href="@item.Source">@file.Name</a></li>
}
aloisdg wechselt zu codidact.com
quelle
das ist was ich gesucht habe danke !!
Ninjanoel
2

Um eine Variable zu deklarieren, auf die über die Seite zugegriffen werden soll. Am oberen Rand der Seite funktioniert es normalerweise. Implizite oder explizite Wahl.

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


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

Sie können alles in einen Block einfügen und einfach jeden gewünschten Code in diesen Block schreiben, genau den folgenden Code:

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

Es hilft Ihnen, zunächst einen saubereren Code zu haben, und Sie können auch verhindern, dass Ihre Seite viele Male verschiedene Codeblöcke lädt

Sajadre
quelle