2009-06-04 4 views
2

서버에서 JavaScript를 생성해야합니다. JavaScript를 사용하여 ASPX 페이지를 사용하여이 작업을 수행 할 수 있지만 경고가 표시되며 원하는 구문 하이라이팅이 도움이되지 않습니다. .NET 환경/Visual Studio에 특정 ASPX 페이지가 비 HTML 텍스트를 출력한다고 가정하는 방법이 있습니까?ASP.Net에서 템플릿을 사용하여 JavaScript 생성

이유는 현지화 때문입니다. 내 현지화 된 문자열은 서버에서 왔고 페이지의 JavaScript 구문에서이를 필요로합니다. 가장 쉬운 방법은 JSON 객체에서 지역화 된 문자열을 정의하는 하나의 JS 파일 (지금은 l18n.js라고 부름)을 만드는 것입니다.

l18n = { 
    OK: <%= GetString("OK") %>, 
    Cancel: <%= GetString("Cancel") %>, 

    ConfirmDialog: { 
     Title: <%= GetString("ConfirmTitle") %>, 
     Message: <%= GetString("ConfirmMessage") %> 
    } 
    // .. etc. 
} 

이 나를 UI

var okButton = $('<button>' + l18n.OK + '</button>') 

의 다른 부분에서 지역화 된 문자열을 사용하지만 말했듯이, 그냥 ASPX 페이지 내에서 자바 스크립트를 던지고 있습니다, l18n.js.aspx, 경고의 결과와 구문 hilighting을 제공하지 않습니다. 최소한 경고를 없애는 더 좋은 방법이 있습니까? 예외 HRESULT에서 : 현재 한 디자이너 파일의

세대가 실패 0x80042929

그리고 경우에 프로젝트가

대한 설명

닷넷 2.0 위에 구축 문제

언어는 사용자가 선택하지 않아야하므로 항상 변경해서는 안되며 언어 값을 ETag로 사용할 수 있어야 캐싱이 크게 커질 수 없습니다 ue. 브라우저 관점에서 필자는 templated JS를 나머지 파일과 마찬가지로 정적 인 파일이라고 생각한다. 나는 그것을 자동화 할 수 있다면 ~ 10 정적 JS 파일을 개별적으로 선언하고 싶지 않습니다.

답변

2

ASPX은 ASP.NET 양식입니다. 사용자가 ASPX에서 추가 코드를 실행하는 것과 상호 작용할 수있는 Web Form을 나타낼 것으로 예상됩니다. 따라서 ASPX 수명주기는이 중 많은 부분을 나타냅니다.

JS와 같은 원시 출력의 경우이 양식 오버 헤드가 모두없는 ASHX를 사용해야합니다.

특정 경우에 JSON으로 직렬화 할 수있는 일련의 클래스를 만드는 방법을 찾고 있습니다. 직렬화 된 JSON을 ASHX의 출력으로 보냅니다.

+0

Oi! 나는 JSON 직렬화를 전혀 생각하지 않았다! .Net 2.0에서 지금 할 수있는 편리한 라이브러리를 찾아서 어떻게 작동하는지 알아야합니다. 그리고 ASPX가 Forms를 나타 내기로되어 있다는 것을 알고 있습니다. 이것이 ASP.Net을 개인적으로 싫어하는 이유입니다. : | 너무 나쁘다. COM 상호 운용성 등의 다른 많은 옵션이 없다. 직렬화가 어떻게 작동하는지 알려 드리겠습니다. –

+0

ASPX가 특별한 의미를 지녔기 때문에 ASP.NET을 왜 싫어하는지 확신 할 수 없습니다. 이것은 아마도 ASPX 파일이 ASP에서 ASP 파일과 동일한 것으로 간주된다는 점에서 오해입니다. ASP.NET에는 이러한 동등성이 없습니다. 비 HTML 원시 출력을 생성하기 위해 .ashx가 올바른 도구입니다. 정적 콘텐츠를 지원하지 않으므로 <% %> 마크 업을 지원합니다. IMO이게 좋은거야. – AnthonyWJones

+0

나는 모든 페이지가 '폼'으로 간주되어야한다고 생각하지 않으며 추상화 ASP.Net은 매우 새기있다. 나는 ASP.Net이 그것이 의미하는 바에 대한 나쁜 것이라는 말은하지 않고 있지만, 일반적인 웹 개발에서 "모든 것이 하나의 양식"이라는 태도가 잘못되었다고 생각합니다. ASPX에 특정 의미가 있다는 것을 싫어하지는 않습니다. 비 형식 HTML 페이지를 디자인 할 때 사람들이 "form"구조를 사용하도록하는 ASP.Net에는 다른 템플릿 가능한 구문이 없다는 것이 싫습니다. –

-1

스크립트 블록으로 구성된 컨트롤 (.ascx)을 만들 수 있습니까?

은 (는 asp.net의 MVC하지만 너무 asp.net을 클래스라는 작동한다 유사한 무언가의), JQuery와 인텔리을 얻을 이런 일을 수행합니다

<% if (false) 
    { %> 

<script src="../../Static/Scripts/jquery-1.3.2.js" type="text/javascript"></script> 

<% } %> 
+0

이 :이 당신을 의미

  • language_EN.js
  • language_NL.js
  • language_FR.js

그냥 페이지에 포함 할 파일을 선택해야합니다 작동하지 않을 수도 있지만, HTML body 안의 자바 스크립트를 인라인하지 않아도됩니까? 어쨌든 필자는 개인적 선호도없이 자바 스크립트를 인라인해야한다. 브라우저의 관점에서 자바 스크립트를 완전히 다른 파일로 선언 할 방법이 없다는 점을 고려해 볼 때 솔루션이 있다는 것을 알고 있습니다. –

+0

당신의 요점을 봅니다. 나는 당신의 질문에서 그것을 잡지 못했다. 좋은 생각이지만 거기에 동적 데이터가있을 때 .js 파일을 캐싱하는 브라우저에주의하십시오. –

+0

나는 브라우저가 자바 스크립트를 캐시하는 것이 중요하지 않기 때문에 ropstah의 대답은 꽤 좋다고 생각합니다. –

1

스크립트 블록의 각 페이지 상단에 '글로벌'변수 (상수)로 현재 페이지의 언어 요소를 모두로드 할 수도 있습니다.

var LANG_OK = 'ok string'; 
var LANG_CANCEL = 'cancel string'; 
var LANG_CONFIRM_TITLE = 'title string'; 
var LANG_CONFIRM_MESSAGE = 'message string'; 

이것은 동적 인 부분을 자바 스크립트 파일에서 멀리합니다. 즉, javascript 파일은 정적 인 것입니다.

갱신

당신은 위의 내 솔루션을 기반으로 각 언어에 대한 자바 스크립트 저장소를 만드는 것이 좋습니다 수 있습니다.

<% Response.Write "<script type='text/javascript' src='/js/language_" & User.LanguageCode & ".js'></script>" %> 
+0

좋은 아이디어입니다. 내 프로젝트 중 하나에서 이것을 사용할 것입니다. +1! –

+0

언어 리포지토리가 로컬라이제이션의 주요 소스라면 제 선택 이었지만 로컬 화 된 문자열은 웹과 네이티브 애플리케이션간에 공유되므로 동적 소스 JavaScript에 대해 물어 보았습니다.이 소스 코드는 기본 소스에서 지역화 된 문자열을 가져 오는 데 사용할 수 있습니다. 각 페이지의 스크립트 블록은 이에 더 적합하지만 브라우저가로드하는 각 새 페이지에 포함되어 있으므로 막대한 오버 헤드가 발생합니다. –

관련 문제