면도기를 사용하여 부울을 JavaScript 변수에 어떻게 렌더링합니까?


144

cshtml 파일에서 부울을 JavaScript 변수로 렌더링하는 방법

현재 이것은 구문 오류를 보여줍니다.

<script type="text/javascript" >

    var myViewModel = {
        isFollowing: @Model.IsFollowing  // This is a C# bool
    };
</script>

@는 유효한 JS 연산자가 아닙니다. 그것은 문자열에서만 발생할 수 있음을 의미합니다
Ivan Kuckir

이 질문은 나를
Nikos

나는 T #이 무엇인지 모르기 때문에 이것이 C # @Nikos를 의미한다고 가정했습니다.)
Mafii

귀하의 의견이 이해가되지 않습니다
Nikos

와이 Qu는 정말 담당자를 부딪쳤다
Nikos

답변:


298

시도해 볼 수도 있습니다.

isFollowing: '@(Model.IsFollowing)' === '@true'

그리고 더 나은 방법은 다음을 사용하는 것입니다.

isFollowing: @Json.Encode(Model.IsFollowing)

63
@Json.Encode(Model.IsFollowing)가장 우아한 솔루션 인 imho입니다. 감사합니다!
Sandro

2
일반적으로 하나 이상의 부울이 사용되는 경우 전체 모델을 인코딩하면 이후에 사용하기 쉽고 편리합니다. 예 : var model = @ Html.Raw (Json.Encode (Model)); 다음 방금 호출 할 수 있습니다 model.IsFollowing을 (죄송합니다 제가 제대로 주석 코드를 포맷하는 방법을 모른다)
Jynn

@using System.Web.Helpers코드를 완성하려면 추가하십시오 .
taylorswiftfan

29

JSON 부울은 소문자 여야합니다.

따라서 이것을 시도하십시오 (그리고 //줄에 주석을 달지 않도록하십시오 ).

var myViewModel = {
    isFollowing: @Model.IsFollowing.ToString().ToLower()
};

또는 (참고 : 네임 스페이스를 사용해야합니다 System.Xml) :

var myViewModel = {
    isFollowing: @XmlConvert.ToString(Model.IsFollowing)
};

1
.ToString () 접근 방식이 아마도 가장 효율적인 방법 일 것입니다. '@ Model.IsFollowing.ToString (). ToLowerInvariant ()'를 사용하는 것이 좀 더 효율적이고 다소 간단해야합니다.
XDS

이 방법을 사용하면 문자열을 낮추고 낮추는 것이 자바 스크립트에서 멋지게 읽히므로 내 옵션에서 가장 깨끗합니다.
Frank Thomas

28

검색으로 인해 나를 여기로 데려 왔기 때문에 ASP.NET Core에서 방법 IJsonHelper이 없습니다 Encode(). 대신을 사용하십시오 Serialize(). 예 :

isFollowing: @Json.Serialize(Model.IsFollowing)    

3
asp.net 코어를 언급 해 주셔서 감사합니다!
Sharif Mamun

13
var myViewModel = {
    isFollowing: '@(Model.IsFollowing)' == "True";
};

True하지 true물어 ... 좋은 질문 :
왜에서 Boolean.toString 출력을한다 "참"과 "true"로하지


의문의 여지가 없지만 @Model.IsFollowing실제로 유효한 JS 구문 의 인코딩 입니까? 아니면 그것이 부울이기 때문에 일어날 것이라는 사실에 의존하고 있습니까?
gahooa

@ Model.IsFollowing은 js가 아닌 면도기 구문입니다.
Nikos

@gahooa, 아닙니다. Razor 엔진을 사용하여 서버에서 파싱됩니다.
gdoron이 Monica를 지원함

@Nikos, 다음 시도 :'@(Model.IsFollowing)'
gdoron은 Monica

@Nikos, 당신은 그것을 실행하려고 했습니까? 많은 경우 Visual Studio 문제 일 뿐이지 만 완벽하게 실행됩니다. 실행 해보세요!
gdoron이 Monica를 지원함

4

!!를 사용하여 고려해야 할 또 다른 옵션이 있습니다. 부울로 변환.

isFollowing: !!(@Model.IsFollowing ? 1 : 0)

이렇게하면 클라이언트 측에서 다음이 생성되며 1은 true로, 0은 false로 변환됩니다.

isFollowing: !!(1)  -- or !!(0)

사소한 수정 !! @ (Model.IsFollowing? 1 : 0) 훌륭하게 작동
치킨

3

더 읽기 쉬운 해결책은 다음과 같습니다.

isFollowing: @(Model.IsFollowing ? "true" : "false")
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.