2011-07-06 29 views
275

我正在開發一個在asp.net mvc 3中的web應用程序。 我對它很新穎。在使用剃鬚刀的視圖中,我想聲明一些局部變量並在整個頁面中使用它。如何才能做到這一點?如何在Razor中聲明局部變量?

它似乎相當瑣碎能夠做到以下動作:

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

但是,這是行不通的。這可能嗎?

回答

404

我覺得你非常接近,試試這個:

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

哎呀,我正在嘗試所有可能的解決方法,但這個。感謝Tomas! – vondip

+0

你如何在VB.NET中做到這一點? –

+4

哦,我自己發現了它:'@Code .. End Code'而不是'@ {..}' –

40

我覺得變量應該是在同一個塊:

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

至少在MVC3中似乎是這種情況。 –

+0

優秀!任何想法你將如何再次使用變量'isUserConnected'進一步在頁面下方? – SharpC

+0

@SharpC一旦你聲明瞭一個變量,就可以在.cshtml文件的其餘部分找到它。在文件後面,你可以像'@if(isUserConnected){/ * *東西,如果連接* /}'或'

Connected? @isUserConnected
'這樣做(這對字符串更好)。它在該文件之外是不可用的(例如,你必須在partials中分別聲明它)。 –

17

您還可以使用:

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

不需要代碼中的變量

+1

這不提供問題的答案。 –

8

如果你正在尋找一個int變量,一個是增加的代碼循環,你可以使用這樣的事情:

@{ 
    int counter = 1; 

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

沒有直接回答OP的問題,但它可能會幫助你。您可以在範圍內的某個html旁邊聲明一個局部變量,而不會造成任何困難。

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

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

要聲明一個要在整個頁面上訪問的變量....頁面的頂部通常是可行的。隱含或明確地選擇你的選擇。

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


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