2013-08-28 4 views
0

코드 숨김 클래스에 RegisterStartupScript가있어 오류 메시지를 알립니다. 줄 바꿈이나 캐리지 리턴이있는 경우를 제외하고는 문제가 없습니다. 스 니펫은 다음과 같습니다.RegisterStartupScript 캐리지 리턴이 문자열에있을 때 오류가 발생했습니다.

주석 처리 된 코드는 정상적으로 작동합니다.

catch (Exception ex) 
     { 
      //Page.ClientScript.ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Failure", "alert('ERROR: '), true); 
      Page.ClientScript.RegisterStartupScript(this.GetType(), "System Error", "alert('" + ex.Message.Replace("'", "\\'") + "');", true); 
     } 
+0

그래서, 나는이 질문을 이해 모르겠습니다. 귀하의 오류가 잘못되었다고 말하는 것입니까? – paqogomez

+0

경고 메시지가 표시되지 않습니다. – user1967701

+0

[ "SQL injection"] (http://en.wikipedia.org/wiki/SQL_injection)을 읽으십시오 - 귀하를 포함한 많은 언어/조건에 적용됩니다 - 사용자/외부 엔티티가 제공 한 문자열을 배치 할 수 없습니다 텍스트 값을 전달하기위한 적절한 인코딩이나 언어 특정 메커니즘없이 스크립트로 변환 할 수 있습니다. –

답변

0

줄 종결자는 js 문자열에서 허용되지 않습니다. 정규식을 사용하여 라인 종결 자 (캐리지 리턴, 줄 바꿈 문자 등)을 제거 :

var errorMsg = Regex.Replace(ex.Message, 
    @"[\u000A|\u000D|\u2029\u2028|\u000D\u000A]", " "); 

Page.ClientScript.RegisterStartupScript(this.GetType(), "System Error", 
    String.Format("alert('{0}');", errorMsg), true); 
+0

나는 이것을 시도하고 여전히 작동하지 않았다. 경고는 결코 나오지 않는다. 그러나 테스트로서, errorMsg 값을 일반 문자열에 하드 코딩하면 경고 메시지가 나타난다! – user1967701

+0

방화 광구를 시작하고 특정 js 오류를 검사해야합니다. 또한 디버그 모드에서 ex.Message 속성 값을 복사하고 잘못된 기호가 있는지 검사하십시오. –