外部Javascript中的Razor语法

时间:2015-08-06 22:30:07

标签: javascript asp.net asp.net-mvc asp.net-mvc-4 razor

您可能知道,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参数实现此功能?谢谢!

3 个答案:

答案 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;
}