将模型分配给Razor中的Javascript变量

Ser*_*hos 9 javascript c# asp.net-mvc jquery razor

我有一个强类型视图绑定到一个对象,该对象包含一些对象的Collection(列表).我知道Razor在生成页面时会在服务器端执行,而Javascript变量在页面显示之后才会被实例化...但是它可能以某种方式转换模型(视图绑定到或者它的任何字段到Razor中的JSON而不诉诸AJAX调用来获取该数据?

你知道,像......

var myJavascriptVariable = @Model.MyCollection
Run Code Online (Sandbox Code Playgroud)

哪里@Model.MyCollection是一些对象的列表.

谢谢

Art*_*kov 31

要获取json数据,您可以使用以下构造:

var jsData = @Html.Raw(Json.Encode(Model.MyCollection));
Run Code Online (Sandbox Code Playgroud)


and*_*lzo 5

试试这个,这样你就可以拥有不引人注目的 javascript:

\n\n

HTML(剃刀):

\n\n
<script id="data" type="text/data-template">\n@Html.Raw(Json.Encode(Model.MyCollection))\n</script>\n
Run Code Online (Sandbox Code Playgroud)\n\n

JS(您可以在外部文件中使用它):

\n\n
var\n   jsonString = $(\'#data\').html(),\n   jsonValue = (new Function( "return( " + jsonString + " );" ))();\n
Run Code Online (Sandbox Code Playgroud)\n\n

例子

\n\n

HTML:

\n\n
<script id="data" type="text/data-template">\n    { \'name\': \'Pedro\', \'Age\': 33}\n</script>\n<div id="result"></div>\n
Run Code Online (Sandbox Code Playgroud)\n\n

JS\xe2\x80\x8b

\n\n
var\n   jsonString = $(\'#data\').html(),\n    jsonValue = (new Function( "return( " + jsonString + " );" ))();\n\n$(\'#result\').html(jsonValue.name);\n
Run Code Online (Sandbox Code Playgroud)\n\n

\xe2\x80\x8b

\n