如何将模型数据从局部视图传递到JavaScript?

时间:2014-10-17 04:12:48

标签: javascript model-view-controller partial-views

我有一个强有力的A型号部分视图。

是否可以将模型数据传递给外部JavaScript?

我的部分视图暂时是这样的:

@model MyProject.Models.myModel
<script src=".../myScript.js"><script>
<span>
      @Html.DisplayFor(model => model)
      //how do I pass data to myScript.js?
</span>

在外部JavaScript(myScript.js)中:

$(document).ready(function () {
    //how do I get data from the partial view?
})

1 个答案:

答案 0 :(得分:0)

首先,不推荐在部分视图中使用脚本,因此我将使用非局部视图来说明我的答案。

你所要求的是不可能的,但你在部分视图的父视图中肯定会有这样的东西:

@model MyProject.Models.ParentModel
...
<script src=".../myScript.js"><script>
...
<span>
      ...
      @Html.DisplayFor(model => model)
      ...
</span>
...
<script>
        $(document).ready(function(){
           var jsVariable = '@Model.MyModelVariable'
        })
<script>  
...

通过这种方式,您可以在脚本中获得强类型模型的好处,但请注意这违反了不显眼的js原则......但是,合理使用是无害的。

我找到了一个很好的做法,可以像这样使用Module pattern

<script>
   $(document).ready(function(){
       var mod = new MyModule({
             foo : '@Model.Foo',
             bazSelector: '@Html.NameFor(model => model.Baz).ToString()'
             // ... other module options
       })
   });
<script>

然后在您的外部文件中,您可以拥有您的模块:

function MyModule(options){
  // use the options created from a strongly typed model... 
}