2009-08-11 5 views
4

쉬운 대답은 알고 있지만 두 가지 문제가 있습니다.JS 파일에 변수를 전달하는 방법

문제 1 : asp.net 페이지에서

이 같은 자바 스크립트 블록 :

<script type="text/javascript"> 
    function doSomethingRandom() { 
     var myVarToUse = <asp:Literal runat="server" ID="HackyLiteral" /> 
    } 
</script> 

확인이 문제의 단순화 된 버전, 그래서, 그러나 명확해야 . 이제 JS 파일에이 함수를 이동하려면 ...하지만 JS로 asp : Literal 가져올 수 없습니다.

var myVarToUse = <asp:Literal runat="server" ID="HackyLiteral" /> 
<script src="myJSFile.js" /> 

... 좀 아프거나, 더 좋은 방법이 있습니까?

문제 2 :

비슷한 문제가 있지만, 이번에는 두 번째 버전은 다음과 같습니다

<asp:ScriptManagerProxy runat="server"> 
    <Scripts> 
     <asp:ScriptReference Path="~/tree/AttributeTree.js" /> 
    </Scripts> 
</asp:ScriptManagerProxy> 

하지만 이번에는 내가 현실적으로

var myVarToUse = <asp:Literal runat="server" ID="HackyLiteral" /> 

을 넣을 수 없습니다 ScriptManagerProxy를 사용하면 스크립트 파일이 나타나는 위치를 정확히 알 수 없기 때문입니다.

그래서 문제가 있습니다. 감사.

답변

3

PageRegisterStartupScript 메서드를 사용하여 초기화 함수를 ClientScriptManager에 등록합니다. 자바 스크립트 파일에는 함수 만 포함되며 ScriptManager을 통해로드됩니다 (예 : 코드 조각과 유사).

<% 
    Page.JSStartupScript(string.Format("initFeatureX({0}, {1}, {2});", 
     AntiXss.JavaScriptEncode(ViewData.Property1), 
     AntiXss.JavaScriptEncode(ViewData.Property2), 
     AntiXss.JavaScriptEncode(ViewData.Property3))); 
%> 

를이 또한 ScriptManager들과 함께 좋은 작품 : 우리는 시작 스크립트를 등록에 도움 (JSStartupScript라고도 함) 페이지에 대한 우리의 코드는 다음과 같은 하루의 끝에서 확장 방법을 썼습니다 CompositeScript 컬렉션 및 LoadScriptsBeforeUI = false 설정입니다.

+0

+1 정확히 내가 최근 프로젝트에서 수행 한 작업 –

1

기본적으로 : 그렇게 할 수 없습니다.

당신이 할 수있는 일은 ASP에 의해 생성 된 사이트의 값을 설정 한 다음 외부 js 스크립트에서 그 변수를 참조하는 것입니다.하지만 그것은 추한 것입니다.

다른 해결책은이 변수를 쿠키 (ASP에서 설정)에 저장 한 다음 외부 JS에서 해당 쿠키를 읽을 수 있다는 것입니다. 이 값을 표시하는 사이트의 URL에 전달하고 JS에서 url을 구문 분석하여 값을 얻을 수도 있지만 쿠키를 더 잘 사용할 수 있다고 생각합니다. 여전히 URL이 깨끗하고 쿠키를 읽는 것이 URL을 파싱하기 쉽습니다. params.

+0

+1 쿠키 용. 좋은 생각. –

0

aspx 파일을 js 파일로 사용할 수 있습니다.

\<script src="<%= ResolveUrl("~/js/dynamic.aspx") %>"></script>

당신은 영문에서 원하는 무엇이든 할 수 있습니다.

+0

(슬래시 제거 - stackoverflow는 스크립트 태그를 제거하고 싶습니다.) –

+1

두려워하는 해결책에 캐싱 문제가 있습니다. 링크에 동적 매개 변수를 남기지 않으면 브라우저가 캐시에 저장하고 ID가 변경되어 변경되었을 수있는 업데이트 된 버전을 다운로드하지 않습니다. 동적 매개 변수를 추가하면 브라우저는 페이지를 새로 고칠 때마다이 파일을 다운로드합니다. – RaYell

0

다른 방법은 javascript 파일을 동적으로로드하는 것입니다. 나는이

<script> 
var myVarToUse = <asp:Literal runat="server" ID="HackyLiteral" /> 
ComponentLoad("/tree/AttributeTree.js"); //here Javascript file will be loaded 
</script> 

같은 것을 의미하지만, 심지어이 최선의 해결책이 아닙니다. 전역 변수가 많이 있기 때문에. 이렇게하는 것이 더 좋습니다.

<script> 
ComponentLoad("/tree/AttributeTree.js","doSomethingRandom",{myVarToUse:"<asp:Literal runat="server" ID="HackyLiteral" />"}); //here Javascript file will be loaded 
</script> 
관련 문제