Razor'da yerel bir değişken nasıl bildirilir?


354

Asp.net mvc 3'te bir web uygulaması geliştiriyorum. Çok yeniyim. Jilet kullanan bir görünümde, bazı yerel değişkenleri bildirmek ve bunu tüm sayfada kullanmak istiyorum. Bu nasıl yapılabilir?

Aşağıdaki eylemi yapabilmek oldukça önemsiz görünüyor:

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

Ama bu işe yaramıyor. Mümkün mü?

Yanıtlar:


522

Bence oldukça yakındın, şunu dene:

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

Ah tanrım, bunun dışında her türlü olası çabayı deniyordum. Teşekkürler Tomas!
vondip

Bunu VB.NET'te nasıl yaparsınız?
Stefan Paul Noack

7
ah, kendim öğrendim: @Code .. End Codeyerine@{ .. }
Stefan Paul Noack

1
@ Abhijeet.Nagre, yazdığı soruda: @bool isUserConnected = string.IsNullOrEmpty(Model.CreatorFullName);ancak değişken tanımı bir "kod bloğu" içinde olmalıdır. O zaman neden daha iyi bir cevap veremiyorum, jilet böyle çalışıyor.
Tomas Jansson

2
@AbhijeetNagre - Jilet genellikle kodun nerede başladığını ve bittiğini anlamada oldukça iyidir, ancak mükemmel değildir. Bazen sadece Razor / C # olarak neyin tedavi edilmesi gerektiği ve neyin olmaması gerektiği konusunda biraz ipucu vermek zorundayız. Bir Razor hatası alırsanız, { }etiket eklemek genellikle ilk adımdır
Jon Story

50

Değişkenin aynı blokta olması gerektiğini düşünüyorum:

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

En azından MVC3'te durum böyle.
Matthew Walton

1
Mükemmel! Daha sonra değişkeni isUserConnectedtekrar sayfanın altında nasıl kullanacağınız hakkında bir fikriniz var mı?
SharpC

@SharpC Bir değişkeni bu .cshtml dosyasının geri kalanında kullanılabilir olarak bildirdikten sonra. Daha sonra dosyada @if (isUserConnected) { /* stuff if connected */ }veya gibi bir şey yapabilirsiniz <div>Connected? @isUserConnected</div>(bu dizelerle daha iyi çalışır). Yine de bu dosyanın dışında kullanılamaz (örneğin, kısmi olarak ayrı olarak bildirmeniz gerekir).
Dan Mangiarelli

18

Ayrıca kullanabilirsiniz:

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

Kodda bir değişkene gerek yok


6
Bu soruya bir cevap vermez.
Owen Pauling

13

Kod döngüleri olarak artan bir int değişkeni arıyorsanız, şöyle bir şey kullanabilirsiniz:

@{
  int counter = 1;

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

12

OP'nin sorununa doğrudan bir cevap değil, aynı zamanda size yardımcı olabilir. Bir kapsam içindeki bazı html'nin yanında yerel bir değişkeni sorunsuz olarak bildirebilirsiniz.

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

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

2

Sayfanın üst kısmında erişilebileceğini bildirmek için sayfanın üst kısmında genellikle çalışır. Örtük veya açıkça seçiminiz.

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


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

1

her şeyi bir bloğa koyabilir ve bu bloğa istediğiniz kodu kolayca tam olarak aşağıdaki kodu yazabilirsiniz:

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

ilk önce daha temiz bir kod elde etmenize yardımcı olur ve ayrıca sayfanızın farklı kod bloklarını birçok kez yüklemesini önleyebilirsiniz

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.