Передача словаря из контроллера в Javascript
У меня есть модель вида, как это:
public class weightdata
{
...some properties
public string weights;
}
Тогда у меня в контроллере:
weightdata details = new weightdata();
Dictionary<string,float> dict = new Dictionary<string,float>();
//do something to fill the dictionary with values
var ser = new System.Web.Script.Serialization.JavaScriptSerializer();
details.weights = ser.Serialize(dict);
return View(details);
Тогда в представлении:
<script type="text/javascript">
var dict = @{Html.Raw(new JavaScriptSerializer().Deserialize<Dictionary<string,float>>(Model.Weights));}
</script>
Но рендеринг страницы: var dict = (это пусто)
Как я могу получить этот словарь значений туда, где он может быть использован JavaScript?
1 ответ
Ваша собственность уже сериализована, то есть это уже JSON. Вы не хотите десериализовать это в представлении, просто напишите это непосредственно:
var dict = @Html.Raw(Model.Weights);
Другой альтернативой является сделать вашу собственность Dictionary<string, float>
вместо строки вы можете сериализовать ее в представление:
var dict = @Html.Raw(new JavaScriptSerializer().Serialize(Model.Weights));
Что-то, о чем я только что прочитал, может сделать ваш взгляд немного чище - вы можете фактически сбросить JSON в свой собственный script
пометить с type="application/json"
и ссылаться на него в JavaScript. Это может сделать ваш редактор немного счастливее, поскольку легче отделить javascript от кода C#.
Что-то вроде:
<!-- assuming your Weights property is the serialized JSON string -->
<script id="some-json" type="application/json">
@Model.Weights
</script>
<script type="text/javascript">
var dict = JSON.parse(document.getElementById("some-json").innerHTML);
</script>
Просто убедитесь, что вы ориентируетесь на IE8+ или настоящий браузер - если вам нужна поддержка IE7, вам понадобится что-то вроде json2.js.