我正在使用ASP.NET MVC 2并且需要将所有javascripts存储在单独的javascript文件中时会遇到这种情况。
但是在某些页面中,Javascript包含来自服务器端的信息,所以我需要一种方法来做这样的事情。
我想制作单独的JS文件并将它们包含在Site.Master
中。但我还是想制作像这样的可行代码块
loadNews("<%= Model.A%>", "<%= Model.B%>");
有什么方法可以做一些技巧吗?
答案 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