2012-06-16 1 views
1

아래의 MVC보기 코드에서 isLoggedInDb에 도구 설명이 녹색으로 밑줄이 그어져 있습니다. ';'. 분명히;가 있으며 Google에게는 어렵습니다. 그 위에. 다른 사람들이 JavaScript 서버를 이런 식으로 만드는 데 문제가 있다는 것을 보았습니다. 아마도 모범 사례가 아닙니다. 이 문제를 무시해야합니까, 아니면 Intellisense가 불만을 제기 할 합법적 인 이유가 있습니까?면도기 : 예상 ';' JavaScript 블록에서 C#으로 문자열을 선언 할 때

@* SHTML Code Above *@ 

<script type="text/javascript"> 
    @{ 
     string isLoggedInDb; 

     if(Session["isLoggedInDb"] != null) 
     { 
      if(Session["isLoggedInDb"].ToString() == "1") 
      { 
       isLoggedInDb = "1"; 
      } 
      else 
      { 
       isLoggedInDb = "0"; 
      } 
     } 
    } 

    var [email protected](isLoggedInDb); 

    @*....etc*@ 

    } 

편집 : 단지가 종종 캐시 별도의 파일에 자바 스크립트를 유지하는 가장 좋은 방법은 간주 될 수 있기 때문에 아마 프로그래밍 방식으로 자바 스크립트를 구축하는 것은 좋은 생각이 아니라고 나에게 발생

. JavaScript에서 대신 읽는 HTML의 숨겨진 변수를 프로그래밍해야한다고 생각합니다. 어쩌면 누군가가 이것을 확인할 수 있습니다.

답변

1

코드는 그대로 작동해야하지만 Razor Parser는 자바 스크립트 인텔리 센스와 싸우므로 다음과 같이 내부에 있어야 할 필요가 없으므로 모든 C# 코드 로직을 스크립트 태그 밖으로 옮길 수 있습니다.

의심의 여지없이
@{ 
     string isLoggedInDb; 

     if(Session["isLoggedInDb"] != null) 
     { 
      if(Session["isLoggedInDb"].ToString() == "1") 
      { 
       isLoggedInDb = "1"; 
      } 
      else 
      { 
       isLoggedInDb = "0"; 
      } 
     } 
    } 

@*....etc*@ 

<script type="text/javascript"> 

    var [email protected](isLoggedInDb); 


..etc.. 
</script> 
+0

당신이 옳습니다. 매우 간단합니다.

2

나는 100 % 확실하지 않다,하지만 당신은 @{ }

이 시도 면도칼 코드 블록에 있기 때문에 나는 컴파일러는 C# 코드로 보는 생각 :에 관해서는

<script type="text/javascript"> 
    string isLoggedInDb; 

    @if(Session["isLoggedInDb"] != null) 
    { 
     if(Session["isLoggedInDb"].ToString() == "1") 
     { 
      <text>isLoggedInDb = "1";</text> 
     } 
     else 
     { 
      <text>isLoggedInDb = "0";</text> 
     } 
    } 
</script> 

서버에서 JS를 작성하면 개인적으로 생각을 견딜 수 없다 (필자는 클라이언트/서버/CSS 코드를 병합하는 것을 좋아하지 않는다). 나는 그 성능에 대해 이야기 할 수는 없지만 모든 JS가 어디서 왔는지를 추적하는 악몽 유지 관리 시나리오에 대해 스스로를 설정하고 있다고 말하면서 스크립트를 쉽게 디버그하고 관리 할 수있는 능력을 잃지는 않을 것입니다.

+0

감사합니다. 제이슨의 방법은 효과가 있었고, 위의 방법을 시도했지만, C#이 js 안에있는 한 인텔리 센스는 엉망이되었습니다. 나는 당신이 말하는 것처럼이 기술을 피하려고 노력할 것입니다. – Dave

2

당신이 비슷한을 복용의 접근을해야한다고 생각 :

var isLoggedOn = @Model.IsLoggedInDb 

IsLoggedInDb 당신의 ViewModel의 일부가되어야합니다, 당신의보기 세션을 확인되어서는 안된다, 이것은 매우 취성, 쉽게 테스트 할 수없는, 그리고 contro llers 목적은 프리젠 테이션 레이어 (보기)의 데이터를 조율하는 것입니다.

+0

고마워, 내가 서둘러서 최선의 방법 대신 마음에 와서 첫 번째 방법을 찾은 것 같아. 나는 그것을 시도 할 것이다. – Dave

+0

더 이상 생각해 보면이 코드는 부모 레이아웃 안에 있으며 모델을 할당하는 방법을 모르겠습니다. 모델을 정규 페이지에 할당하는 데 익숙해졌습니다. 모델을 마스터 레이아웃에 할당하는 방법에 대한 간단한 가이드가 있습니까? – Dave

+1

그런 경우 단순히 레이아웃의 일부로 RenderAction을 사용하십시오. 귀하의 견해는 세션 객체를 완전히 인식하지 못하고 깨끗한 MVC 패턴을 유지합니다. –

관련 문제