2012-07-12 45 views
18

Tôi đã xem một số bài viết liên quan đến chủ đề này và một vài blog, nhưng không có bài viết nào đề cập đến kết quả tôi nhận được.Cách tạo chuỗi javascript trong dao cạo

Điều tôi muốn là tạo bản đồ google maps với thông tin trên đó. Nhập thủ công các kết quả thông tin vào thông tin chính xác. Vì vậy, một phần hoạt động.

Nơi tôi gặp khó khăn là khi tôi sẽ tạo động lực tạo mảng javascript bằng chuỗi có thông tin tôi muốn trên bản đồ của mình.

Mã html Tôi muốn nhận được là:

<script type="text/javascript">  
    var projects = [ 
     ['Kantoor 4.1 bestaande bouw', 52.25446, 6.16024700000003, 'Deventer', '', 'adviseurs', 'rating30'], 
     ['School nieuw 4.0', 52.243161, 4.43677860000003, 'Noordwijk', '', 'adviseurs', 'rating30'], 
    ]; 

Rất đơn giản mảng javascript, mà tôi nghĩ để tạo ra với:

<script type="text/javascript"> 
var projects = [ 
    @foreach (var item in Model) 
    { 
     @HttpUtility.JavaScriptStringEncode("['" + item.Gebouwnaam + "', " + item.LocatieLatitude.ToString().Replace(",", ".") + ", " + item.LocatieLongitude.ToString().Replace(",", ".") + ", '" + item.Plaats + "', '" + item.Gebruiksfunctie + "', '" + item.Licentiehouder + "', '" + item.rating + "'],"); 
    } 
]; 
</script> 

Tuy nhiên điều này mang lại cho tôi:

<script type="text/javascript"> 
var projects = [ 
    [\u0027Kantoor 4.1 bestaande bouw\u0027, 52.25446, 6.16024700000003, \u0027Deventer\u0027, \u0027\u0027, \u0027adviseurs\u0027, \u0027rating30\u0027], 
    [\u0027School nieuw 4.0\u0027, 52.243161, 4.43677860000003, \u0027Noordwijk\u0027, \u0027\u0027, \u0027adviseurs\u0027, \u0027rating30\u0027], 
]; 
</script> 

Thoát dấu nháy đơn không hoạt động. Tôi đang làm gì sai?

+0

có lẽ có liên quan cho người khác, điều này dường như là một phương pháp thú vị và dao cạo s yntax kết hợp: http://stackoverflow.com/questions/4599169/using-razor-within-javascript –

Trả lời

16

Chỉ cần thử với

<script type="text/javascript"> 
var projects = [ 

    @Html.Raw("['" + "aaa" + "', " + "bbb" + "'],") 


]; 
</script> 

nó làm việc và cho thấy ...

<script type="text/javascript"> 
var projects = [ 

     ['aaa', bbb'], 


]; 
</script> 
+0

hoạt động này rực rỡ, cảm ơn bạn. Điều này đã khiến tôi đau đầu kể từ hôm qua –

+1

lol ... áp dụng SO cho tất cả các cơn đau đầu của bạn trong tương lai;) – Yasser

+1

Bạn không bỏ lỡ một "trước" bbb "? – radbyx

12

Bạn không muốn gọi JavaScriptStringEncode trên toàn bộ chuỗi, đó cũng sẽ mã hóa các chỉ số theo nghĩa đen của bạn (mà đang được chuyển đổi thành \ u0027 trong ví dụ của bạn). Thay vào đó, gọi nó là trên mỗi mục trong mảng của bạn như thế này:

<script type="text/javascript"> 
var projects = [ 
    @foreach (var item in Model) 
    { 
     String.Format("['{0}',{1},{2},'{3}','{4}','{5}','{6}']", 
         HttpUtility.JavaScriptStringEncode(item.Gebouwnaam), 
         HttpUtility.JavaScriptStringEncode(item.LocatieLatitude.ToString().Replace(",", ".")), 
         HttpUtility.JavaScriptStringEncode(item.LocatieLongitude.ToString().Replace(",", ".")), 
         HttpUtility.JavaScriptStringEncode(item.Plaats), 
         HttpUtility.JavaScriptStringEncode(item.Gebruiksfunctie), 
         HttpUtility.JavaScriptStringEncode(item.Licentiehouder), 
         HttpUtility.JavaScriptStringEncode(item.rating) 
     ) 
    } 
]; 
</script> 
+0

là có lý do nào tại sao tôi nên sử dụng giải pháp này chứ không phải @ Html.Raw? –

+3

Html.raw sẽ không thoát khỏi các ký tự có ý nghĩa đặc biệt trong Javascript (như trích dẫn một lần). Tùy thuộc vào dữ liệu của bạn có thể dẫn đến lỗi thời gian chạy. –

2

Tôi tin rằng bạn có thể làm hầu hết công việc nặng nhọc trong .net và đòn bẩy Html.Raw để chuyển đổi đối tượng dành cho bạn:

@{ 
    var myObj = Model.Select(i => new { 
     item.Gebouwnaam, 
     item.LocatieLatitude.ToString().Replace(",", "."), 
     item.LocatieLongitude.ToString().Replace(",", "."), 
     item.Plaats, 
     item.Gebruiksfunctie, 
     item.Licentiehouder, 
     item.rating }).ToArray(); 
} 

<script type="text/javascript"> 
    var jsObj = @Html.Raw(myObj); 
</script> 

Kể từ khi nó được đề cập đến trong câu hỏi này, HttpUtility.JavaScriptStringEncode() đi kèm trong thực sự tiện dụng cho các chuỗi chứa ký tự newline:

@{ var myNetString = "Hi,\r\nMy name is Joe\r\nAnd I work in a button factory"; } 

<script type='text/javascript'> 
    var myJsString = '@HttpUtility.JavaScriptStringEncode(myNetString)'; 
</script> 
Các vấn đề liên quan