2009-04-30 24 views
7

Tôi đang chạy string.Format trên chuỗi chỉ đọc có chứa một chút HTML + javascript nhưng thay vào đó tôi nhận được System.FormatException.string.Format ném ngoại lệ System.Format trên HTML + javascript

Đây là chuỗi định dạng của tôi:

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

Tất cả tôi đang làm là đi qua trong tên đối tượng. Như thế này:

string.Format(javascript, "grid"); 

Trả lời

12

Vì bạn có dấu ngoặc nhọn trong chuỗi bạn cần phải thoát khỏi chúng bằng cách tăng gấp đôi chúng lên ({{}}) để ngăn chặn các định dạng từ suy nghĩ họ là thẻ.

khởi chuỗi bạn nên tìm một cái gì đó như thế này:

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

Chỉ vì tò mò, không phải là ký tự thoát chuẩn trong C# một dấu gạch chéo ngược (\\)? Nghĩa là, các dấu ngoặc nhọn không được thoát bằng "\ {\}" thay vì "{{}}"? Tôi hiểu rằng đôi niềng răng hoạt động, nhưng nó là thực hành tốt nhất? –

+4

Vì anh ta sử dụng ký hiệu @ trước chuỗi, dấu gạch chéo ngược sẽ được hiểu theo nghĩa đen là dấu gạch chéo ngược nên không có gì thoát được –

+1

John là chính xác - vì đó là chuỗi nguyên văn có một số lần thoát mà bạn có thể làm và tất cả chúng liên quan đến tăng gấp đôi ký tự (tức là {trở thành {{, "trở thành" ", v.v.) –

6

String.Format cần dấu ngoặc thêm để được thoát. Bạn có thể làm tốt hơn việc làm như thế này, có thể dễ đọc hơn là thoát khỏi mỗi khung nếu bạn không cần tất cả chức năng của String.Format:

mystring.Replace("{0}","grid"); 
+0

+1 đó là cách tôi giải quyết nó ban đầu. –

+0

+1 Điều này sẽ đơn giản hơn và cũng sẽ nhanh hơn một chút. –

Các vấn đề liên quan