Bagaimana cara mendeklarasikan variabel lokal di Razor?

354

Saya mengembangkan aplikasi web di asp.net mvc 3. Saya sangat baru di sana. Dalam tampilan menggunakan pisau cukur, saya ingin mendeklarasikan beberapa variabel lokal dan menggunakannya di seluruh halaman. Bagaimana ini bisa dilakukan?

Tampaknya agak sepele untuk dapat melakukan tindakan berikut:

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

Tetapi ini tidak berhasil. Apakah ini mungkin?

Vondip
sumber

Jawaban:

521

Saya pikir Anda sudah cukup dekat, coba ini:

@{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
sumber
oh sial, aku sudah mencoba semua kemungkinan yang bisa dilakukan selain ini. Tomas terima kasih!
vondip
Bagaimana Anda melakukan ini di VB.NET?
Stefan Paul Noack
7
oh, saya menemukannya sendiri: @Code .. End Codebukannya@{ .. }
Stefan Paul Noack
1
@ Abhijeet.Nagre, dalam pertanyaan yang ditulisnya: @bool isUserConnected = string.IsNullOrEmpty(Model.CreatorFullName);tetapi definisi variabel harus berada di dalam "blok kode". Saya tidak bisa memberikan jawaban yang lebih baik untuk mengapa saat itu, itu hanya cara kerja pisau cukur.
Tomas Jansson
2
@AbhijeetNagre - Razor biasanya cukup pandai memahami di mana kode mulai dan berakhir, tetapi itu tidak sempurna. Terkadang kita hanya perlu memberikan sedikit petunjuk tentang apa yang harus diperlakukan sebagai Razor / C #, dan apa yang seharusnya tidak. Jika Anda pernah mendapatkan kesalahan Razor, menambahkan { }tag biasanya merupakan langkah pertama
Jon Story
50

Saya pikir variabelnya harus di blok yang sama:

@{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
sumber
Itu tampaknya menjadi masalah, setidaknya di MVC3.
Matthew Walton
1
Luar biasa! Adakah yang tahu bagaimana Anda akan menggunakan variabel itu isUserConnectedlagi di bagian bawah halaman?
SharpC
@SharpC Setelah Anda mendeklarasikan variabel seperti itu, ia tersedia di sisa file .cshtml itu. Kemudian dalam file Anda bisa melakukan sesuatu seperti @if (isUserConnected) { /* stuff if connected */ }atau <div>Connected? @isUserConnected</div>(ini berfungsi lebih baik dengan string). Itu tidak tersedia di luar file itu (misalnya Anda harus mendeklarasikannya secara terpisah dalam sebagian).
Dan Mangiarelli
18

Anda juga bisa menggunakan:

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

Tidak perlu variabel dalam kode

marcel
sumber
6
Ini tidak memberikan jawaban untuk pertanyaan itu.
Owen Pauling
13

Jika Anda mencari variabel int, variabel yang bertambah sebagai loop kode, Anda dapat menggunakan sesuatu seperti ini:

@{
  int counter = 1;

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

Bukan jawaban langsung untuk masalah OP, tetapi mungkin juga membantu Anda. Anda dapat mendeklarasikan variabel lokal di sebelah beberapa html di dalam lingkup tanpa masalah.

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

    <li><a href="@item.Source">@file.Name</a></li>
}
aloisdg pindah ke codidact.com
sumber
ini yang saya cari terima kasih !!
Ninjanoel
2

untuk mendeklarasikan var untuk diakses di seluruh halaman. Di bagian atas halaman biasanya berfungsi. Tersirat atau tersurat pilihan Anda.

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


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

Anda dapat meletakkan semuanya di blok dan dengan mudah menulis kode apa pun yang Anda inginkan di blok itu persis seperti kode di bawah ini:

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

ini membantu Anda untuk memiliki pada awalnya kode pembersih dan juga Anda dapat mencegah halaman Anda memuat berkali-kali blok kode yang berbeda

sajadre
sumber