在单独的Javascript文件中获取模型值

时间:2012-04-03 12:12:15

标签: javascript asp.net-mvc asp.net-mvc-2 model

我正在使用ASP.NET MVC 2并且需要将所有javascripts存储在单独的javascript文件中时会遇到这种情况。
但是在某些页面中,Javascript包含来自服务器端的信息,所以我需要一种方法来做这样的事情。

我想制作单独的JS文件并将它们包含在Site.Master中。但我还是想制作像这样的可行代码块

loadNews("<%= Model.A%>", "<%= Model.B%>");

有什么方法可以做一些技巧吗?

3 个答案:

答案 0 :(得分:4)

我是MVC的新手,也面临着这种情况。我正在通过视图上的脚本块调用javascript函数来处理它。

这样的事情:

- On MyFile.js

function loadNews(a, b) {
   //Do fun stuff
}

- 在Index.cshtml上

<script type="text/javascript">
   loadNews("<%= Model.A%>", "<%= Model.B%>");
</script>

另一个选项可能是在视图的脚本块上声明变量并在javascript上引用这些变量,因为它们的范围是全局的。这将是一个丑陋的事情,并且有点难以保持,但也可以做到这一点。像这样:

- On MyFile.js

function loadNews() {
   doSomethingWithA(a);
   doSomethingElseWithB(b);
}

- 在Index.cshtml上

<script type="text/javascript">
   var a = "<%= Model.A%>";
   var b = "<%= Model.B%>";
</script>

答案 1 :(得分:4)

我们之前遇到了同样的问题,并使用jQuery找到了一个很好的解决方案。

首先,我们使用自己的命名空间扩展jQuery(我们将以下内容放在一个单独的JS文件中,并将其包含在母版页中):

$.extend({
    myProject: {            
        dataitem: {},
        dataitems: function (a) {
            $.extend($.myProject.dataitem, a);
        }
    }
});

现在,每当我们想要从ASP视图传递给JS文件的值时,我们只需将以下内容添加到视图中:

<script type="text/javascript">            
        $.myProject.dataitems({   
            foo: Model.Bar,   
            bar: Model.Foo
        });
</script> 

现在,对于您的单独JS文件(将包含在前面提到的<script></script>块下面),访问该值很简单:

$('#foo').click(function () {
    alert($.myProject.dataitem.foo);
});

答案 2 :(得分:1)

您可以将数据放入隐藏字段,然后使用Javascript访问它们吗?

<%= Html.HiddenFor(x => x.A) %>

loadNews($('#A').val());

编辑:对不起,MVC2