2011-07-06 83 views
3

因此,我需要根據數據庫中的數據向我的視圖中的字符串數組傳遞JavaScript函數。所以我有這樣的代碼在控制器:ASP .NET MVC3 ViewBag消毒字符串

 string top_six_string = "["; 
     foreach (ObjectModel om in collection) 
     { 
      myProject.Models.BlobFile file = null; 
      if (om.BlobFile != null) 
      { 
       file = om.BlobFile; 
      } 
      else if (om.BlobFiles.Count != 0) 
      { 
       file = om.BlobFiles.First(); 
      } 
      if (file != null) 
      { 
       top_six_string += " \"" + file.BlobFileID + "\","; 
      } 
     } 
     top_six_string = top_six_string.TrimEnd(','); 
     top_six_string += "]"; 
     ViewBag.TopSixList = top_six_string; 

現在,我不是特別理解爲什麼我們既有BlobFile場和BlobFiles集,但這並不是這一點。重點是,調試表明,我準確地得到了我想要的字符串(形式爲[「25」,「21」,「61」,「59」])。

但在運行JavaScript的時候,我得到了令人困惑的錯誤「意外字符&」,和一點點源Chrome中查看使我瞭解到,串出來看是這樣的:

[ "25", "21", "61", "59"] 

所以我的假設是,ViewBag正在清理字符串,它通過了顯示在HTML中,但顯然這不是我現在關心的。我的假設是否正確?有沒有另一種方式來傳遞這些信息?有沒有辦法可以將字符串強制回引號?

+0

這是一個壞主意,原始字符串發送到您的網站,而第一消毒它們@ Html.Raw:

你想要的輸出視圖中的值時,是這樣的。惡意用戶可以使用您的JavaScript發送自己的數據,並破解您的網站。小心。 –

回答

7

當您在視圖中輸出ViewBag的內容時,問題很可能發生。默認情況下,Html幫手清理輸出以幫助防止注入攻擊。 (ViewBag.TopSixList)

+0

工作就像一個魅力!謝謝! –

+0

@ chris-dale - 太好了!不要忘記標記爲已回答,以便其他人可以找到它。 :) – Tridus