如何使用模型列表打印javascript数组

时间:2017-09-26 11:09:12

标签: javascript c# jquery .net asp.net-mvc

使用asp .net mvc5,如何在javascript中恢复模型? 这是我的代码

控制:

<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>

查看:

public ActionResult Test() {

    var data = List<string>() {
        "test",
        "essai"
    };

    return View(data); 
}

部分Js:

@model ...

@section scripts {
    <script src="~/Scripts/Parametre/DatePublication.js"></script>
}

找不到部分Js中的@Model。

2 个答案:

答案 0 :(得分:1)

您无法在 Razor 中执行此操作,因为在 Razor 中,使用@块的每个内容都会被Razor自动 HTML 编码

解决方案是迭代您的列表并创建一个javascript数组。

var myArray = [];
@foreach (var item in Model)
{
    @:myArray.push('@item');
}
console.log(myArray);

@foreach区块内,您需要使用markup标记或Javascript标记标记@:<text>

答案 1 :(得分:0)

Model仅适用于可执行服务器代码的剃刀视图。如果你想将它作为外部javascript文件中的javascript数组,你可以将它读取到剃刀视图中的js数组变量,稍后在其他脚本中使用它

 <script>
     var myArray = @Html.Raw(JsonConvert.SerializeObject(Model))
     console.log(myArray);
 </script>
 <script src="ExternalJsFile.js"></script>

您现在可以在ExternalJsFile.js访问myArray。

通过简单的全局变量传递数据并不是一个好主意。它们很容易被覆盖。(如果你加载的某些第三方插件脚本也使用相同的变量名怎么办?)所以你应该考虑命名空间来保证数据安全。

例如,

 <script>
     var myApp = myApp || {};  
     myApp.pageData = myApp.pageData || {};
     myApp.pageData.model = @Html.Raw(JsonConvert.SerializeObject(Model));
 </script>
 <script src="ExternalJsFile.js"></script>

现在在externalJs文件中,您可以像console.log(myApp.pageData.model)

一样访问它