Programing

Razor 구문 및 자바 스크립트

crosscheck 2021. 1. 7. 19:41
반응형

Razor 구문 및 자바 스크립트


테스트로 웹 양식에서 작성한 개념 증명 앱을 Razor로 변환하여 평가할 수 있도록합니다.

나는 지금까지 내 머리를 아프게하는 한 가지 문제에 부딪혔다 .. 클라이언트 측 자바 스크립트를 생성하는 중 ...

웹 양식

<script type="text/javascript">
    var jqGridIdList = "<%: Url.Action ("getidlist", "office", new { area = "reports" }) %>";

    var availableIds = [];
    <% for (var i = 0; i < Model.Data.Count (); i++) { %>
    availableIds.push({ value : "<%: Model.Data.ElementAt (i).Text %>", label : "<%: Model.Data.ElementAt (i).Text %>" });
    <% } %>
</script>

Razor 구문

<script type="text/javascript">
    var jqGridIdList = "@Url.Action("getidlist", "office", new { area = "reports" })";

    var availableIds = [];
    @for(var i = 0; i < Model.Data.Count (); i++) {
    availableIds.push({ value : "@Model.Data.ElementAt(i).Text", label : "@Model.Data.ElementAt(i).Text" });
    }
</script>

컴파일러는 'availableIds.push'줄에 다음 오류를 표시합니다.

컴파일러 오류 메시지 : CS1525 : 잘못된 식 용어 '{'

분명히 C #으로 컴파일하려고 시도하고 있지만 어떻게 중지합니까?

감사합니다,
Kieron


가상 요소로 감싸 야합니다 <text>. 이렇게하면 파서가 다시 html 모드로 전환되고 javascript가 c #이 아닌 html의 일부로 구문 분석됩니다. 그것이 발생하는 이유 @for()는 ac # 블록이고 그 안에서 처리되는 모든 것은 html 태그에 의해 이스케이프 될 때까지 c #으로 간주됩니다. html 태그를 원하지 않기 때문에 razor는 <text>모드를 전환 하는 태그를 제공합니다 .

asp.net 웹 양식에서 차이점을 발견하면 C # 모드에서 벗어나는 <% for을 끝 %>냅니다. Visual Studio 2010 용 razor 하이 라이터 확장을 다운로드하면 코드가 코드로 처리되고 html이 html로 처리되는시기를 확인할 수 있습니다.

<script type="text/javascript">
    var jqGridIdList = "@Url.Action("getidlist", "office", new { area = "reports" })";

    var availableIds = [];
    @for(var i = 0; i < Model.Data.Count (); i++) {
        <text>availableIds.push({ value : "@Model.Data.ElementAt(i).Text", label : "@Model.Data.ElementAt(i).Text" });</text>
    }
</script>

최신 버전 업데이트

이제 @:더 가독성을 위해 구문을 사용할 수 있습니다.

<script type="text/javascript">
    var jqGridIdList = "@Url.Action("getidlist", "office", new { area = "reports" })";

    var availableIds = [];
    @for(var i = 0; i < Model.Data.Count (); i++) {
        @:availableIds.push({ value : "@Model.Data.ElementAt(i).Text", label : "@Model.Data.ElementAt(i).Text" });
    }
</script>

ReferenceURL : https://stackoverflow.com/questions/4045308/razor-syntax-and-javascript

반응형