Pregunta Sintaxis Razor en Javascript externo


Entonces, como usted sabe, la sintaxis de Razor en ASP.NET MVC no funciona en archivos JavaScript externos.

Mi solución actual es poner la sintaxis de Razor en una variable global y establecer el valor de esa variable desde la vista de mvc que está haciendo uso de ese archivo .js.

Archivo JavaScript:

function myFunc() {
  alert(myValue);
}

MVC Ver archivo:

<script language="text/javascript">
    myValue = @myValueFromModel;
</script>

Quiero saber cómo puedo pasar mi valor directamente como un parámetro a la funcion? Prefiero tener llamadas explícitas con param que confiar en globales, sin embargo, no estoy tan interesado en javascript.

¿Cómo implementaría esto con los parámetros de JavaScript? ¡Gracias!


5
2017-08-06 22:30


origen


Respuestas:


Simplemente haga que su función acepte un argumento y utilícelo en la alerta (o en cualquier lugar).

external.js

function myFunc(value) {
  alert(value);
}

someview.cshtml

<script>
    myFunc(@myValueFromModel);
</script>

Una cosa a tener en cuenta, sin embargo, es que si myValueFromModel es una cadena entonces va a venir a través de myFunc(hello) por lo que necesita envolver eso entre comillas para que se convierta en myFunc('hello') Me gusta esto

myFunc('@(myValueFromModel)');

Tenga en cuenta el extra () utilizado con la maquinilla de afeitar. Esto ayuda al motor a distinguir dónde está la ruptura entre el código de la maquinilla de afeitar para que no suceda nada extraño. Puede ser útil cuando hay anidados ( o " alrededor.

editar

Si esto se va a hacer varias veces, entonces es posible que se deban realizar algunos cambios en el final de JavaScript. Principalmente que el ejemplo mostrado no representa adecuadamente el escenario. Necesitará ser modificado. Es posible que desee utilizar una estructura simple como esta.

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

someview.cshtml

<script>
    myFunc.set('@(myValueFromModel)');
    myFunc();//can be called repeatedly now
</script>

7
2017-08-06 22:40



A menudo encuentro que JavaScript en el navegador está típicamente vinculado conceptualmente a un elemento específico. Si ese es su caso, puede asociar el valor con ese elemento en su código Razor, y luego usar JavaScript para extraer ese valor y usarlo de alguna manera.

Por ejemplo:

<div class="my-class" data-func-arg="@myValueFromModel"></div>

JavaScript estático:

$(function() {
    $('.my-class').click(function() {
         var arg = $(this).data('func-arg');
         myFunc(arg);
    });
});

3
2017-08-06 22:49



¿Desea ejecutar su función de inmediato? ¿O quieres llamar a la función con el parámetro?

Podría agregar una función de envoltura sin parámetros y llamar desde adentro su función con la var global como parámetro. Y cuando necesita llamar a myFunc (), lo llama a través de myFuncWrapper ();

function myFuncWrapper(){ 
    myFunc(myValue);
}

function myFunc(myParam){
//function code here;
}

1
2017-08-06 22:49