2009-04-30 2 views
7

string.Format을 약간의 HTML + 자바 스크립트가 포함 된 읽기 전용 문자열에 실행 중이지만 대신 System.FormatException이 표시됩니다.string.Format이 HTML + javascript에서 System.Format 예외를 throw합니다.

이 내 포맷 문자열입니다

<script type="text/javascript"> 
    function {0}_showHideFieldWindow() { 
     if ({0}.IsCustomizationWindowVisible()) { 
      {0}.HideCustomizationWindow(); 
     } else { 
      {0}.ShowCustomizationWindow(); 
     } 
    } 
</script> 

내가 개체 이름에 통과하고있어 모든. 이처럼 :

string.Format(javascript, "grid"); 

답변

12

당신이 그들이 토큰입니다 생각에서 포매터를 방지하기 위해 ({{}}을) 그들을 배로을 탈출하는 데 필요한 문자열에 중괄호를 가지고 있기 때문에.

귀하의 문자열 초기화는 다음과 같이 보일 것이다 :

String javascript = @"<script type=""text/javascript""> 
      function {0}_showHideFieldWindow() {{ 
      if ({0}.IsCustomizationWindowVisible()) {{ 
       {0}.HideCustomizationWindow(); 
      }} else {{ 
       {0}.ShowCustomizationWindow(); 
      }} 
     }} 
    </script>"; 
+1

이 표준 이스케이프 문자되지 않습니다 : 당신이 String.Format의 모든 기능을 필요로하지 않는 경우 각 브래킷을 탈출보다 더 많은 읽을 수 있습니다 이런 일을하고 더 나을 수 있습니다 C# 백 슬래시 (\\)? 즉, 중괄호를 "{{}}"대신 "\ {\}"로 이스케이프해서는 안됩니까? 나는 이중 괄호가 작동한다는 것을 이해 합니다만, 가장 좋은 방법입니까? –

+4

그는 문자열 앞에 @ 기호를 사용했기 때문에 백 슬래시는 말 그대로 백 슬래시로 해석되므로 아무 것도 이스케이프 처리되지 않습니다. –

+1

존은 정확합니다.이 단어는 축 어적으로 사용할 수있는 몇 가지 이스케이프가 있기 때문에 정확합니다. –

6

String.Format은 별도의 브라켓을 탈출해야합니다.

그냥 호기심
mystring.Replace("{0}","grid"); 
+0

+1 그게 원래 해결 방법입니다. –

+0

+1 이것은 더 간단 할 것이고 조금 더 빨라질 것입니다. –

관련 문제