혼합 면도기와 자바 스크립트 코드


171

면도기와 js를 혼합하는 방법과 혼동됩니다. 이것은 내가 붙어있는 현재 기능입니다.

<script type="text/javascript">

        var data = [];

        @foreach (var r in Model.rows)
        {
                data.push([ @r.UnixTime * 1000, @r.Value ]);
        }

c # 코드를 선언 할 수 <c#></c#>있고 다른 모든 것이 JS 코드 인 경우-이것이 내가 따르는 것입니다.

<script type="text/javascript">

        var data = [];

        <c#>@foreach (var r in Model.rows) {</c#>
                data.push([ <c#>@r.UnixTime</c#> * 1000, <c#>@r.Value</c#> ]);
        <c#>}</c#>

이것을 달성하는 가장 좋은 방법은 무엇입니까?


2
분명히 구문 강조는 훌륭하고 내 <c#>태그 와 혼동됩니다 : -P
Kyle Brandt

1
이 뷰의 HTML 출력을 확인 했습니까? 모양과 모양이 어떻게 다른가?
sukru

오류가 발생 Conditional Compilation 하여 HTML을 볼 수 없으므로 C # 코드의 일부라고 생각합니다.
Kyle Brandt

1
JavaScript 오류 인 것 같습니다 : webdeveloper.com/forum/showthread.php?t=99780 . 정확한 오류 메시지는 무엇이며 어디서 구할 수 있습니까?
sukru

2
JS와 C #을 너무 밀접하게 혼합하려고하면 읽기 / 유지하기가 어려울 것입니다. 컴파일러 가이 코드를 허용하지 않아서 기쁩니다. :)
Jim Bolla

답변:


332

사용 <text>:

<script type="text/javascript">

   var data = [];

   @foreach (var r in Model.rows)
   {
      <text>
            data.push([ @r.UnixTime * 1000, @r.Value ]);
      </text>
   }
</script>

27
Razor는 실행될 때 Javascript 블록에서 잘 작동하지만 구문 강조 표시가 모든 종류의 혼란을 얻는 방법이 싫습니다. 그것은 내가 생각하는 자바 스크립트 모드에 붙어 있기 때문에 모든 면도기 코드를 유효하지 않은 구문으로 강조 표시합니다.
Chev

2
이 코드가 번들에 있다면 어떨까요? 자바 스크립트 파일 안에 코드를 작성할 수 있습니까 ??
ncubica

2
하나의 변수가 다른 변수보다 적고 면도기가 정신병자가되는지 확인하고 싶을 때까지 완벽하게 작동합니다!
cbp December

1
@ncubica 개념에 잘못된 것보다 번들로 면도기를 원한다면. 면도기는 자바 스크립트가 아닌보기 용입니다.
100r

1
@ncubica이 게시물은 오래되었지만 귀하의 질문에 대한 해결책은 다음과 같습니다. JS 파일에 함수를 작성하고로 렌더링 Scripts.Render한 다음 <script>태그 에서 함수를 호출하십시오 . 정확히 우아하지는 않지만 대부분의 (읽기 : 간단한) 사용 사례에서 작동합니다.
Sinjai

81

코드 블록 내부 (예를 들어, @foreach), 당신은 마크 업 (또는,이 경우, JavaScript)를 표시해야 @:또는 <text>태그를 .

마크 업 컨텍스트 내에서 코드 블록 ( @{ ... }또는 @if, ...) 으로 코드를 둘러싸 야합니다 .


왜 "마크 업 마크"라고 말합니까? 실제로 컨텐츠가 마크 업인 경우에는 문제가되지 않습니다.
Max Toro

1
@Max : 마크 업처럼 보이지 않더라도 마크 업입니다. (서버 측 코드와 반대)
SLaks

@:내가 찾고 있던 것입니다!
Muflix

53

당신은 또한 간단하게 사용할 수 있습니다

<script type="text/javascript">

   var data = [];

   @foreach (var r in Model.rows)
   {
       @:data.push([ @r.UnixTime * 1000, @r.Value ]);
   }
</script>

참고 @ :


12

더 많은 언어를 혼합하지 마십시오.

<script type="text/javascript">
    var data = @Json.Encode(Model); // !!!! export data !!!!

    for(var prop in data){
      console.log( prop + " "+ data[prop]);
    }

문제가 발생하면 시도해 볼 수도 있습니다

@Html.Raw(Json.Encode(Model));

이것은 훌륭하지만 혼합해야 할 합법적 인 사례가 있습니다. 그러나 이것이 완벽하게 맞기 때문에 내가 사용한 솔루션입니다.
frostymarvelous

3
이 점에 유의 한다 언어를 혼합. 반 자바 스크립트 ( "var data =") 및 반자 /C#("@Json.Encode(Model) ") 문이 있습니다. 단지 덜 침습적 인 믹싱이지만, 본문에서 생성 된 JavaScript를 생성하는 Razor / C # "foreach"를 갖는 것보다 믹싱이 적습니다. :-)
Jonathan Gilbert

3
Uncaught SyntaxError: Unexpected token &모델이 다음과 같이되기 때문에 반환 됩니다[{&quot;Id&quot;:1,&quot;Name&quot;:&quot;Name}]
Weihui Guo

1

자바 스크립트를보기와 분리하지만 면도기를 사용하는 기존의 비 방법은 Scripts.cshtml파일 을 만들고 혼합 된 자바 스크립트 / 면도기를 배치하는 것입니다.

Index.cshtml

<div id="Result">
</div>

<button id="btnLoad">Click me</button>

@section scripts
{
    @Html.Partial("Scripts")
}

Scripts.cshtml

<script type="text/javascript">
    var url = "@Url.Action("Index", "Home")";

    $(document).ready(function() {
        $("#btnLoad").click(function() {
            $.ajax({
                type: "POST",
                url: url ,
                data: {someParameter: "some value"},
                contentType: "application/json; charset=utf-8",
                dataType: "json",

                success: function(msg) {
                    $("#Result").text(msg.d);
                }
            });
        });
    });
</script>


-1

JS 스크립트 내부에서 Razor 코드를 @ {}로 감싸고 @ 만 사용하는 것을 알고 있어야합니다. 때로는 작동하지 않습니다.

function hideSurveyReminder() {
       @Session["_isSurveyPassed"] = true;
    }

이것은 생산할 것이다

function hideSurveyReminder() {
       False = true;
    }

브라우저에서 = (

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