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?

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

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

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


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

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

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

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.