Razor / JavaScript 및 후행 세미콜론
Visual Studio 2012를 사용하여 Razor보기 페이지의 JavaScript 섹션에서 Razor 구문과 JavaScript 구문 간의 싸움이라고 생각하는 것을 얻었습니다. 특히 스크립트 섹션의 후행 세미콜론은 intellisense에 의해 플래그가 지정되고 컴파일러 경고 (오류 아님)가 전달됩니다.
'경고 13 구문 오류'.
제거하면 명령문 종료 권장 사항이 표시됩니다 ( 이 경우 ReSharper 이지만 모범 사례).
<script type="text/javascript">
$().ready(function(){
var customer = @Html.Raw(ViewBag.CustomerJSON); // <- Razor (I think) doesn't like this semicolon
});
</script>
Razor의 버그입니까? 그렇다면이 문제를 피하기 위해 이것을 다시 작성할 수있는 방법이 있습니까?
Razor의 버그입니까?
절대적으로하지. 응용 프로그램을 실행하면 예상대로 작동합니다.
사용중인 도구 (Visual Studio 2012, ReSharper 등)의 버그로, 완벽하게 유효한 구문을 인식 할 수없고 경고해서는 안되는 사항에 대해 경고 할 수 없습니다. Microsoft Connect 사이트에서 문제를 열고 아직 수행되지 않은 경우이 버그에 신호를 보낼 수 있습니다.
이것이 여전히 일어나고있는 것 같고 성가신 일이기 때문에 적어도 내가 "핵"으로 사용하게 된 것을 다른 사람들에게 알려줄 것이라고 생각했습니다. 나는 경고를 무시하고 싶지 않고 오히려 hokier 구문을 받아들이고 싶습니다 (그리고 누군가는 이것이 성능을 죽일 것이라고 말할 것입니다 :))
해결 방법으로 사용하는 것은 마지막에 클라이언트 측 추가를 사용하는 것입니다. 저에게이 오류는 "정수"상수를 정의 할 때 발생했습니다.
window.foo = @(Model.Something);
나에게 좋은 오래된 세미콜론 오류를 주었다. 나는 단순히 이것을 다음과 같이 변경했습니다.
window.foo = @Model.Something + 0;
(명시된 질문의 경우 '', 그래서 + ''를 추가 할 수 있어야합니다.
클라이언트에서 완전히 다른 추가가 발생하고 우아하지는 않지만 오류를 피합니다. 따라서 사용하거나 사용하지 않지만 경고 / 오류를 보는 것보다 이것을 선호합니다.
누군가이 서버 측 구문 해결 방법을 알고 있다면 클라이언트 측보다 이것을 선호하므로 추가하십시오.
Razor 구문을 JavaScript ID 함수로 래핑하면 IDE도 만족스러워집니다.
<script type="text/javascript">
@* I stands for Identity *@
function I(obj) { return obj; }
$().ready(function(){
var customer = I(@Html.Raw(ViewBag.CustomerJSON));
});
</script>
이것은 나를 위해 일했습니다.
var customer = @Html.Raw(ViewBag.CustomerJSON + ";")
다음은 부울에 대한 해결 방법입니다.
var myBool = @(Model.MyBool ? "true;" : "false;")
이것은 나를 위해 일했습니다.
@Html.Raw(string.Format("var customer = {0};", ViewBag.CustomerJSON));
<script type="text/javascript">
$().ready(function(){
var customerName = ('@ViewBag.CustomerName'); // <- wrap in parens
});
</script>
괄호로 감싸는 것만 큼 간단하지 않나요? 콘솔을 통해 값을 입력하면 부작용없이 잘 작동하는 것 같습니다.
It works for strings, but it still gives the error for non-quoted values, but I still like this for string values. For numbers you could just use parseInt('@Model.TotalResultCount', 10)
.
참고URL : https://stackoverflow.com/questions/12111729/razor-javascript-and-trailing-semicolon
'development' 카테고리의 다른 글
요청 라이브러리를 사용하는 Python 앱 단위 테스트 (0) | 2020.12.08 |
---|---|
Heroku에서 PostgreSQL의 내장 전체 텍스트 검색을 사용하지 않는 이유는 무엇입니까? (0) | 2020.12.08 |
안드로이드 폰갭에서 버튼을 클릭하면 앱을 종료 하시겠습니까? (0) | 2020.12.08 |
Windows 용 Git-scm, msysGit 및 Git의 차이점 (0) | 2020.12.08 |
Xcode 6 : iOS 8.1 개발자 디스크 이미지를 마운트 할 수 없습니다. (0) | 2020.12.08 |