在视图@model列表中使用javascript变量

时间:2014-10-29 16:02:54

标签: javascript jquery asp.net-mvc

如果我的观点模型是

@model List<myModel> 

我可以在javascript

中执行以下操作吗?
<script>
 var someint = 0;
 var modelValue = @Model[someint].myValue;
</script>

4 个答案:

答案 0 :(得分:3)

您的客户端代码无法理解@model作为服务器端代码。

或者,您可以通过执行

将整个服务器端模型转换为JS对象
var model = @Html.Raw(Json.Encode(Model));

或者,如果您只想要特定属性值,那么只需执行

var modelValue = @Html.Raw(Json.Encode(Model.myValue));

如果您Model是一个集合,那么您可以使用顺序for循环迭代您的模型集合,如

<script type="text/javascript">
     var model = @Html.Raw(Json.Encode(Model));
     for (var i = 0; i < model.length; i++) {
        alert(model[i].myValue);

        // Do Something
    }
</script>

答案 1 :(得分:1)

您可以在javascript中访问您的模型,但您需要引用剃刀代码

@model List<myModel> 

<script>
  var modelValue = "@Model[0].myValue"; // add quotes
</script>

然而你不能组合剃刀和javascript变量,所以以下不起作用(someint是一个javascript变量)

<script>
  var someint = 0;
  var modelValue = "@Model[someint].myValue";
</script>

但以下将

@{ var someint = 0; } // declared in razor

<script>
  var modelValue = @Model[someint].myValue;
</script>

答案 2 :(得分:1)

您可以通过函数说明将模型的值传递给Javascript:

 <img src="image" onclick="myFunction(@Model[i].property)">

使用Javascript:

  function myFunction(item)
 { 
  //dosomething
 }

答案 3 :(得分:0)

你可以这样做:

  var percent = @Model.TankLevel; //TankLevel is Int within model of model
        var cap = @Model.TankCapacity; //TankCapacity is an Int within my model also
        percent=(percent/cap).toFixed(2);

只要

  • 包含您的型号
  • 脚本在您的视图中
  • 您的模型具有值(否则您必须先检查值是否为空)
  • 你知道你不能编辑&#39;来自这里的模型值,只在客户端做一些事情(模型是服务器端,并在发送之前编译; javascript是客户端,所以只能在页面上做东西)。

从本质上讲,它取决于你使用变量 modelValue 做什么。


再次阅读您的问题后,您似乎正试图几乎访问“&#39;”列表&#39;就像使用索引的数组一样,这是一个明确的 no no