2014-12-12 2 views
1

@: 연산자를 사용하면 mvc 지시문에서 javascript 변수에 액세스 할 수 있지만 해당 연산자를 닫는 방법을 알 수는 없습니다. 이 코드를 실행하면@ : Razor 연산자를 닫는 방법

var temp = 123 
@{ Html.RenderAction("DeliveredShipmentDetailView", "PartialPages", new {orderId = @:temp});} 

내가

의 오류 메시지가} '코드 블록은 폐쇄가 없습니다 ""문자 "

:

나는 다음과 같은 코드가 있습니다

나는 이것이 닫는 문자가 자바 스크립트로 간주되는 원인이되는 @: 문자로 인해 발생하지만이 문제를 해결하는 방법을 모른다는 것을 알고 있습니다. 괄호 안에 연산자를 래핑하는 것은 가지고 있지 않은 동일한 효과를 갖기 때문입니다.

+0

내 지식에 따라 JavaScript에서 C# 변수를 이런 방식으로 할당 할 수는 없습니다. –

+0

브라우저에서 JavaScript가 실행되면 Razor가 서버에서 실행됩니다. 브라우저 데이터를 서버로 전송하는 "마법 같은"방법은 없습니다. 그렇게하고 싶다면 별도의 AJAX 요청으로 처리해야하지만 별도의 요청이 될 수 있기 때문에 특정 Razor 템플릿의 경우 너무 늦습니다. ASP.NET MVC가 실제로 당신을 위해 무엇을하는지 알고 싶을 수도 있습니다. – Wormbo

답변

1

잘못되었습니다. @ : 아니요을 사용하면 면도칼 C# 코드에서 JS 변수에 액세스 할 수 있습니다. 사실 불가능하기 때문에 아무것도 허용하지 않습니다. Razor는 html이 렌더링 될 때 서버에서 실행되는 반면 JS 코드는 클라이언트 브라우저에서 실행됩니다. 따라서 Razor 구문에서 JS 변수에 직접 액세스 할 수 없습니다.

@ : 실제로 실제로 면도기에서 C# 코드 블록 내부에서 일반 텍스트를 출력 할 수 있습니다.

예 :

한 가지 방법 내부 교류 # 코드 블록

@if (foo) { 
    <text>Plain Text</text> 
} 

또는 @와

에서 출력 텍스트 :

@if (foo) { 
    @:Plain Text is @bar 
} 

같은 일 ...

클릭 here 빠른 참조 용

0

@ :가 필요하지 않으므로 이미 은 해당 도우미 문 내의 코드 부분에입니다.

업데이트 : 위의 내용은 temp이 C# 변수이고 자바 스크립트 변수가 아닌 경우 true입니다. 물론 원칙적으로 Razor에서 자바 스크립트 변수를 사용할 수는 없습니다.

+0

그건 @ : 않습니다. @ : 실제로는 코드 블록 안에서만 사용됩니다. 물론 OP에서는 사용하지 않는다고 생각합니다. @ : 코드 블록 내부에서 일반 텍스트를 출력합니다. – irreal

+0

물론 그렇습니다. 변수가 C#에서 온 것이면 코드 블록에서 필요하지 않습니다. JS 변수라면 어쨌든 작동하지 않을 것입니다! – Robert

+0

그래도 코드 블록 안에 있지 않고 C# 변수를 삽입하려는 경우에는 @ :을 사용하는 것처럼 대답이 정확합니다. – irreal