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?

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

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

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


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

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

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

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.