2013-08-12 2 views
1

자바 스크립트에 문제가 있습니다.C#에서 자바 스크립트 문자열 이스케이프 문제

자바 스크립트는 C# winforms 프로젝트에서 문자열로 동적으로 생성됩니다.

실제 javascript 코드가 올바르게 생성되고 모든 큰 따옴표가 이스케이프 처리됩니다. 그래서

eval(\"var someVar = 'someValue'\"); 

같은 브라우저에서 문자열로 결국 같은

string js = "eval(\"var someVar = 'someValue'\");"; 

로 내 문제는 문제가 탈출하는 "\"이다 나는이 함수의 내부 문자열을 할당 할 때 온다 "someVar"앞에 "C#"이 자동으로 삽입됩니다. 브라우저에서 실제 함수를 실행하려고하면 문자열이 유효하지 않게됩니다.

감사합니다.

+3

이 극악한 JavaScript를 생성하는 C 코드가 아닌 코드를 변경할 수 있습니까? 'eval'을 사용하는 좋은 이유는 없습니다. C#에는 JSON 인코더가 있습니까? 아니면이 작업을 수행하는 라이브러리가 있습니까? – Halcyon

+0

나는 eval을 사용하지 않고있다. 이 예는 최종 제품을 보여주기에 충분합니다. 그리고 예, 코드를 변경할 수 있습니다. 의견 있으십니까? – William

+0

문자열을 웹에 어떻게 전달합니까? – EZSlaver

답변

1

.net 4 이후 프레임 워크를 사용하는 경우 HttpUtility.JavaScriptStringEncode 메서드를 확인할 수 있습니다.

1

eval은 필요하지 않습니다. 이것이 당신이하려는 일을하는 방법입니다.

1 단계 : aspx 페이지에서 리터럴 개체를 설정하십시오. 나는 숨겨진 div에 리터럴을 넣었다.

<div style="display:none;" id="TheDiv"> 
    <asp:Literal runat="server" ID="TheLiteral" /> 
</div> 

2 단계 : 리터럴에 값을 C# 코드 배후 파일에 삽입합니다.

TheLiteral.Text = SomeValue; 
TheLiteral.Text = SomeValue.ToString(); // in case SomeValue is not a string 

3 단계 : 클라이언트에서 값을 얻을 : 확인을 위해

var SomeVar = $('#TheDiv').text(); 
$('#TheDiv').remove(); 

,이뿐만 아니라 그 일을 다른 방법이 있지만이 방법은 나를 위해 작동합니다.

+0

asp.net을 사용하지 않고 winforms를 사용하고 있습니다. – William

+0

나는 이해하지 못한다 : 자바 스크립트는 어디서 실행 중인가? 웹 애플리케이션 또는 데스크탑 애플리케이션을 구축하고 있습니까? – frenchie

+0

어디서나 실행되지 않습니다. 오히려 자바 스크립트는 데스크톱 응용 프로그램에서 만들어 지지만 나중에 웹 응용 프로그램에서 실행됩니다. – William

관련 문제