2016-08-08 16 views
0

を壊している、私は自分のページにロードされる項目のリストをViewBag変数を作成:ページ側で特殊文字はASP MVCコントローラでJS

public ActionResult Items() 
    { 
     ViewBag.itemList = Repo.GetItems(); // Returns list of Items 
     return View("Items"); 
    } 

、私はこのデータを解析しています:私のノックアウトロード機能で

@{ 
Newtonsoft.Json.JsonSerializerSettings jsonSettings = new Newtonsoft.Json.JsonSerializerSettings { ContractResolver = new Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver() }; 
var jsonData = @Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(Model, Newtonsoft.Json.Formatting.Indented, jsonSettings)); 
var serial = new System.Web.Script.Serialization.JavaScriptSerializer(); 
var items = serial.Serialize(ViewBag.itemList); 
} 

、私はリストを解析し、JSON.parse()関数を破る改行文字を削除します。

self.load = function() { 
var itemsEscaped = '@Html.Raw(items.Replace("'", "\\'"))'.replace("\n", "\\n"); 
var someItems = JSON.parse(itemsEscaped); 
ko.mapping.fromJS(someItems, self.itemMapping, self.someItems); 
} 

ただし、他の特殊文字がJSON.parse()関数を壊すことがあります。これらをJS側のコントローラでフィルタリングする方法はありますか?

+0

をチェックアウトhttp://stackoverflow.com/a/7836439/850825 – jessh

+0

私はそのポストを見ました。私はそこに解決策を試みましたが、問題がありました。コントローラー側でこれを行う方が良いのではないでしょうか? – PaulP

+0

JSON.parse()を破棄するデータの例を挙げてください。 –

答えて

0

JSONをページのHTMLに直接書き込むのではなく、サーバーへのJavaScriptリクエストへの応答として渡すことができます。

あなたのcshtmlに直接書きたいと思っている場合は、How do I write unencoded Json to my View using Razor?を参照してください。エンコードされていないJSONをページに印刷し、問題の原因にならないようにエンコードされた特殊文字さらに解析する。

+0

私が応答としてJSONを渡すと(今私がプロジェクトの他の部分で行っている)、私はまだ無効な文字でJSONを解析する問題に遭遇します。 – PaulP

+0

そして、私が投稿した質問の答えの中で述べたように '@ Html.Raw(Json.Encode(/ * ... * /))'を使ってみましたか? –