Come dichiarare una variabile locale in Razor?


354

Sto sviluppando un'applicazione web in asp.net mvc 3. Sono molto nuovo. In una vista che usa il rasoio, vorrei dichiarare alcune variabili locali e usarlo su tutta la pagina. Come si può fare?

Sembra piuttosto banale riuscire a fare la seguente azione:

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

Ma questo non funziona. È possibile?

Risposte:


521

Penso che tu fossi abbastanza vicino, prova questo:

@{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 dannazione, stavo provando ogni possibile lavoro in giro ma questo. Grazie Tomas!
venerdì

Come si fa in VB.NET?
Stefan Paul Noack,

7
oh, l'ho scoperto da solo: @Code .. End Codeinvece di@{ .. }
Stefan Paul Noack, il

1
@ Abhijeet.Nagre, nella domanda che scrive: @bool isUserConnected = string.IsNullOrEmpty(Model.CreatorFullName);ma la definizione della variabile deve essere all'interno di un "blocco di codice". Non posso dare una risposta migliore al perché, allora, è proprio come funziona il rasoio.
Tomas Jansson,

2
@AbhijeetNagre - Il rasoio di solito è abbastanza bravo a capire dove inizia e finisce il codice, ma non è perfetto. A volte dobbiamo solo dare un piccolo suggerimento su ciò che dovrebbe essere trattato come Razor / C # e cosa non dovrebbe. Se ricevi un errore Razor, l'aggiunta di { }tag è in genere il primo passo
Jon Story,

50

Penso che la variabile dovrebbe essere nello stesso blocco:

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

Questo sembra essere il caso, almeno in MVC3.
Matthew Walton,

1
Eccellente! Hai idea di come useresti di isUserConnectednuovo la variabile più in basso nella pagina?
SharpC,

@SharpC Dopo aver dichiarato una variabile del genere è disponibile nel resto del file .cshtml. Più avanti nel file potresti fare qualcosa del genere @if (isUserConnected) { /* stuff if connected */ }o <div>Connected? @isUserConnected</div>(funziona meglio con le stringhe). Non è disponibile al di fuori di quel file (ad es. Dovrete dichiararlo separatamente in parziali).
Dan Mangiarelli,

18

Puoi anche usare:

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

Non è necessaria una variabile nel codice


6
Questo non fornisce una risposta alla domanda.
Owen Pauling,

13

Se stai cercando una variabile int, che aumenta con il passare del codice, puoi usare qualcosa del genere:

@{
  int counter = 1;

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

12

Non è una risposta diretta al problema di OP, ma può anche aiutarti. È possibile dichiarare una variabile locale accanto ad alcuni HTML all'interno di un ambito senza problemi.

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

    <li><a href="@item.Source">@file.Name</a></li>
}

questo è quello che stavo cercando grazie !!
Ninjanoel,

2

per dichiarare un var a cui accedere attraverso la pagina. Nella parte superiore della pagina di solito funziona. La tua scelta implicita o esplicita.

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


            @something1 //to display on the page
            @something2 //to display on the page

1

puoi mettere tutto in un blocco e scrivere facilmente qualsiasi codice che desideri in quel blocco proprio esattamente il codice qui sotto:

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

ti aiuta ad avere inizialmente un codice più pulito e puoi anche impedire alla tua pagina di caricare più volte blocchi di codici diversi

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.