您可能知道,ASP.NET MVC中的Razor语法不适用于外部JavaScript文件。
我目前的解决方案是将Razor语法放在一个全局变量中,并从使用该.js文件的mvc视图中设置该变量的值。
JavaScript文件:
function myFunc() {
alert(myValue);
}
MVC查看文件:
<script language="text/javascript">
myValue = @myValueFromModel;
</script>
我想知道如何将myValue 直接作为参数 传递给函数?我更喜欢使用param进行显式调用,而不是依赖于全局变量,但是我不太喜欢javascript。
如何使用javascript参数实现此功能?谢谢!
答案 0 :(得分:7)
让你的函数接受一个参数并在警报中(或在任何地方)使用它。
external.js
function myFunc(value) {
alert(value);
}
someview.cshtml
<script>
myFunc(@myValueFromModel);
</script>
要注意的一件事是,如果myValueFromModel
是一个字符串,那么它将以myFunc(hello)
形式出现,因此您需要将其包含在引号中,使其变为{{1}像这样
myFunc('hello')
请注意razor使用的额外myFunc('@(myValueFromModel)');
。这有助于引擎区分剃刀代码之间的中断位置,因此没有什么奇怪的事情发生。当嵌套()
或(
时,它会非常有用。
修改的
如果要多次执行此操作,则可能需要在JavaScript结尾处进行一些更改。主要是所示示例没有正确描述该场景。它需要修改。您可能想要使用这样的简单结构。
<强> jsFiddle Demo
强>
external.js
"
someview.cshtml
var myFunc= new function(){
var func = this,
myFunc = function(){
alert(func.value);
};
myFunc.set = function(value){
func.value = value;
}
return myFunc;
};
答案 1 :(得分:3)
我经常发现浏览器中的JavaScript通常在概念上与特定元素相关联。如果您的情况属实,您可能希望将该值与Razor代码中的该元素相关联,然后使用JavaScript提取该值并以某种方式使用它。
例如:
<div class="my-class" data-func-arg="@myValueFromModel"></div>
静态JavaScript:
$(function() {
$('.my-class').click(function() {
var arg = $(this).data('func-arg');
myFunc(arg);
});
});
答案 2 :(得分:1)
您想立即执行您的功能吗?或者想用参数?
调用函数您可以添加一个没有参数的包装函数,并在内部使用global var作为参数调用您的函数。当你需要调用myFunc()时,你可以通过myFuncWrapper();
调用它function myFuncWrapper(){
myFunc(myValue);
}
function myFunc(myParam){
//function code here;
}