2011-06-23 15 views
61

¿Cómo puedo acceder al valor de JavaScript dentro de @URL.Action()? algo como:Cómo acceder a la variable de JavaScript dentro de @ URL.Action()

<script type="text/javascript"> 
function name(myjavascriptID) 
{ 
    jQuery("#list_d").jqGrid('setGridParam', { url: '@URL.Action("download file", "download", new { id = <myjavascriptID> })', page: 1 }); 

} 
</script> 

Respuesta

109

No se puede. JavaScript no se ejecuta al generar la URL de acción. Lo que puede hacer es hacer algo como esto:

function name(myjavascriptID) 
{ 
    var link = '@Url.Action("download file", "download", new { id = "-1" })'; 
    link = link.replace("-1", myjavascriptID); 

    jQuery("#list_d").jqGrid('setGridParam', { url: link, page: 1 }); 

} 

HTH.

+0

Gracias por su respuesta, funciona con una pequeña modificación: en lugar de 'link.href' Necesito usar' link'. ¡Muchas gracias! – Bolu

+0

Err sí, gracias por la captura, lo eliminé. –

+20

se siente sucio, pero funciona! –

9

hago algo bastante similar, pero menos detallado:

var myUrl = '@Url.Action("Solution","Partner")/' + myjavascriptID; 
$.ajax.load(myUrl); // or whatever 

que podemos hacer esto a causa de enrutamiento, y en última instancia Url.Action con los parámetros del diccionario ruta se traduce en un URI que se parece a:

http://localhost:41215/Partner/Solution?myJavascriptID=7 

Solo una segunda opción, porque como dijo un sabio anciano: "Son nuestras decisiones, Harry, las que demuestran lo que realmente somos, mucho más que nuestras habilidades".

+0

Rompe la configuración de RoutAttribute: ((( – Kate

5

Puede pasar en las variables a cualquier enlace como se muestra a continuación ...

var url = '@Html.Raw(@Url.Action("MethodName", "ControllerName"))' + '?id = ' + myjavascriptID 
0

Usted puede construir el código JavaScript en C# de esta manera:

function fun(jsId) { 
    var aTag = '<a href="@Html.Raw(@Url.Action("ActionName", "ControllerName", new { objectId = "xxx01xxx" }).Replace("xxx01xxx", "' + jsId + '"))">LINK</a>'; 
} 

Aquí está el código de la pregunta reescrito utilizando esta técnica:

function name(myjavascriptID) { 
    jQuery("#list_d").jqGrid('setGridParam', { url: '@Html.Raw(@URL.Action("download file", "download", new { id = "XXXmyjavascriptIDXXX" }).Replace("XXXmyjavascriptIDXXX", "' + myjavascriptID + '"))', page: 1 }); 
} 
0

En la misma línea que la respuesta de Brian de red, se puede formatear el str url En vez de reemplazar -1 con tu variable, es decir, si, como yo, juzgas que es mejor leer. La siguiente respuesta supone que usted ha modificado String 's prototipo como se sugiere en this answer:

var url = unescape('@Url.Action("download file", "download", new { id = "{0}" })').format(myjavascriptID); 

La llamada unescape es necesario si desea decodificar su {0}. Me gusta esta alternativa, porque hace que sea más fácil tener múltiples parámetros de variables JS. Por ejemplo:

var url = unescape('@Html.Raw(Url.Action("Action", "Controller", new { id = "{0}", name = "{1}" }))').format(myID, myName); 

que añade Html.Raw en mi segundo ejemplo con el fin de evitar tener &amp en la cadena URL.

+0

) Agregue su respuesta con esta y obtenga la respuesta perfecta: http://stackoverflow.com/a/36981170/453142 –

Cuestiones relacionadas