Як оголосити локальну змінну в Razor?


354

Я розробляю веб-додаток у asp.net mvc 3. Я дуже новачок у ньому. З огляду на бритву, я хотів би оголосити деякі локальні змінні і використовувати їх на всій сторінці. Як це можна зробити?

Здається, досить тривіально можна зробити наступні дії:

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

ой, чорт, я намагався зробити всі можливі роботи, але це. Спасибі Томаш!
vondip

Як це зробити у VB.NET?
Стефан Пол Ноак

7
ой, я дізнався це сам: @Code .. End Codeзамість@{ .. }
Стефан Пол Ноак

1
@ Abhijeet.Nagre, в запитанні він пише: @bool isUserConnected = string.IsNullOrEmpty(Model.CreatorFullName);але визначення змінної повинно бути всередині "блоку коду". Я не можу дати кращої відповіді на те, чому тоді це так, як працює бритва.
Томаш Янссон

2
@AbhijeetNagre - Бритва зазвичай досить добре розуміє, звідки починається і закінчується код, але це не ідеально. Іноді ми просто мусимо дати йому трохи підказки щодо того, що слід розглядати як Бритву / С #, а що не слід. Якщо ви коли-небудь отримуєте помилку 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

@SharpC Після оголошення такої змінної вона доступна в решті цього файлу .cshtml. Пізніше у файлі ви можете зробити щось на кшталт @if (isUserConnected) { /* stuff if connected */ }або <div>Connected? @isUserConnected</div>(це краще працює з рядками). Він недоступний за межами цього файлу (наприклад, вам доведеться оголосити його окремо в сторонній формі).
Дан Мангіареллі

18

Ви також можете використовувати:

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

Немає необхідності в змінній в коді


6
Це не дає відповіді на питання.
Оуен Полінг

13

Якщо ви шукаєте змінну int, що збільшується як цикл коду, ви можете використовувати щось подібне:

@{
  int counter = 1;

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

12

Це не пряма відповідь на проблему ОП, але може допомогти і вам. Ви можете оголосити локальну змінну поруч з деяким 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>
        }
    }

це допомагає вам спочатку мати чистіший код, а також ви можете запобігти завантаженню вашої сторінки багато разів різних блоків кодів

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.