Razorでローカル変数を宣言する方法は?


354

私はasp.net mvc 3でWebアプリケーションを開発しています。かみそりを使用するビューでは、いくつかのローカル変数を宣言して、ページ全体で使用したいと思います。これはどのように行うことができますか?

次のアクションを実行できることは、かなり簡単なようです。

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

しかし、これは機能しません。これは可能ですか?

回答:


521

私はあなたがかなり近かったと思います、これを試してください:

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

ああ、私はこれ以外のあらゆる可能な作業を試みました。ありがとうトーマス!
フォンディップ、2011

VB.NETでこれをどのように行いますか?
Stefan Paul Noack、2012年

7
ああ、私は自分でそれを見つけました:@Code .. End Code代わりに@{ .. }
Stefan Paul Noack

1
@ Abhijeet.Nagre、彼が書いた質問では:@bool isUserConnected = string.IsNullOrEmpty(Model.CreatorFullName);変数の定義は「コードブロック」内になければなりません。それがなぜかみそりがどのように機能するのかという理由について、私はもっと良い答えを出すことができません。
Tomas Jansson 2015

2
@AbhijeetNagre-Razorは通常、コードの開始点と終了点の理解に優れていますが、完璧ではありません。ときどき、Razor / C#として何を処理すべきか、何を処理すべきでないかについて、少しヒントを与える必要があるだけです。Razorエラーが発生した場合、{ }通常はタグの追加が最初のステップです
Jon Story

50

変数は同じブロックにあるべきだと思います:

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

少なくともMVC3ではそうです。
マシューウォルトン

1
優秀な!次にisUserConnected、ページのさらに下で変数をどのように使用するか考えていますか?
SharpC、2015年

@SharpCこのような変数を宣言すると、その.cshtmlファイルの残りの部分で使用できるようになります。ファイルの後半では、@if (isUserConnected) { /* stuff if connected */ }または<div>Connected? @isUserConnected</div>(これは文字列でうまく機能します)のようなことができます。ただし、そのファイル以外では使用できません(たとえば、パーシャルで個別に宣言する必要があります)。
Dan Mangiarelli、2015年

18

次のものも使用できます。

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

コードに変数は必要ありません


6
これは質問に対する答えを提供しません。
Owen Pauling

13

コードがループするときにインクリメントされるint変数を探している場合は、次のようなものを使用できます。

@{
  int counter = 1;

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

12

OPの問題に対する直接的な回答ではありませんが、それも役立つかもしれません。スコープ内で、htmlの隣にローカル変数を問題なく宣言できます。

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

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

これは私が探していたものですありがとう!
Ninjanoel

2

ページ全体でアクセスされる変数を宣言します。通常、ページの上部で機能します。暗黙的または明示的に選択。

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


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

1

あなたはすべてをブロックに入れて、そのブロックに望むコードを簡単に書くことができます:

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

それはあなたが最初によりきれいなコードを持っていることを助けます、そしてまたあなたはあなたのページが何度も異なるコードのブロックをロードするのを防ぐことができます

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.