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에서이 작업을 어떻게 수행합니까?
Stefan Paul Noack

7
오, 나는 그것을 스스로 발견했다 : @Code .. End Code대신@{ .. }
Stefan Paul Noack

1
@ Abhijeet.Nagre는 다음과 같이 씁니다. @bool isUserConnected = string.IsNullOrEmpty(Model.CreatorFullName);그러나 변수 정의는 "코드 블록"안에 있어야합니다. 그 이유에 대해 더 잘 대답 할 수는 없습니다. 면도기가 어떻게 작동하는지입니다.
Tomas Jansson

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에서는 그럴 것 같습니다.
Matthew Walton

1
우수한! 그러면 isUserConnected페이지 아래에서 변수를 다시 사용하는 방법에 대한 아이디어가 있습니까?
SharpC

@SharpC 일단 변수를 선언하면 나머지 .cshtml 파일에서 사용할 수 있습니다. 나중에 파일에서 @if (isUserConnected) { /* stuff if connected */ }또는 같은 것을 할 수 있습니다 <div>Connected? @isUserConnected</div>(문자열에서 더 잘 작동합니다). 그러나 파일 외부에서는 사용할 수 없습니다 (예 : 부분적으로 별도로 선언해야 함).
Dan Mangiarelli

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

페이지에서 액세스 할 var를 선언합니다. 페이지 상단에서 일반적으로 작동합니다. 암시 적 또는 명시 적 선택.

          @{
               //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.