外部Javascript中的Razor语法

Tal*_*lsi 5 javascript asp.net asp.net-mvc razor asp.net-mvc-4

您可能知道,ASP.NET MVC中的Razor语法不适用于外部JavaScript文件.

我目前的解决方案是将Razor语法放在一个全局变量中,并从使用该.js文件的mvc视图中设置该变量的值.

JavaScript文件:

function myFunc() {
  alert(myValue);
}
Run Code Online (Sandbox Code Playgroud)

MVC查看文件:

<script language="text/javascript">
    myValue = @myValueFromModel;
</script>
Run Code Online (Sandbox Code Playgroud)

我想知道如何直接将myValue 作为参数传递给函数?我更喜欢使用param进行显式调用而不是依赖于全局变量,但是我并不热衷于javascript.

我如何用javascript参数实现这个?谢谢!

Tra*_*s J 7

让你的函数接受一个参数并在警报(或任何地方)中使用它.

external.js

function myFunc(value) {
  alert(value);
}
Run Code Online (Sandbox Code Playgroud)

someview.cshtml

<script>
    myFunc(@myValueFromModel);
</script>
Run Code Online (Sandbox Code Playgroud)

但要注意的一件事是,如果myValueFromModel是一个字符串然后它将会通过,myFunc(hello)所以你需要将它包装在引号中,所以它变成myFunc('hello')这样

myFunc('@(myValueFromModel)');
Run Code Online (Sandbox Code Playgroud)

注意()剃须刀额外使用.这有助于引擎区分剃刀代码之间的中断位置,因此没有什么奇怪的事情发生.当有嵌套("周围时它可能很有用.

编辑

如果要多次执行此操作,则可能需要在JavaScript结尾处进行一些更改.主要是所示示例没有正确描述该场景.它需要修改.您可能想要使用这样的简单结构.

jsFiddle Demo

external.js

var myFunc= new function(){
 var func = this,
 myFunc = function(){
    alert(func.value);
 };
 myFunc.set = function(value){
    func.value = value;
 }
 return myFunc;
};
Run Code Online (Sandbox Code Playgroud)

someview.cshtml

<script>
    myFunc.set('@(myValueFromModel)');
    myFunc();//can be called repeatedly now
</script>
Run Code Online (Sandbox Code Playgroud)