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

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

}
</script>
77
Bolu 23 jun. 2011 a las 19:34

6 respuestas

La mejor respuesta

No puedes JavaScript no se ejecuta al generar la URL de acción. Lo que puedes 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 });
}
137
Tim Cooper 19 nov. 2019 a las 14:53

Puede reemplazar la URL como el código a continuación

var jsUrl = '@Url.Action("action", "controller")'; // ## is the token
var getUrl = jsUrl.replace('action', action).replace('controller', controller)  
$("#RenderPartial").load(getUrl); 
0
Stephen Rauch 26 mar. 2018 a las 02:17

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

var url = '@Html.Raw(@Url.Action("MethodName", "ControllerName"))' + '?id = ' + myjavascriptID
11
Brian Mains 30 jul. 2015 a las 16:03

Puede compilar 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 reescrita usando 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
xMaa 26 jun. 2016 a las 12:28

Hago algo bastante similar, pero menos detallado:

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

Podemos hacer esto debido al enrutamiento y, en última instancia, la Url. La acción con los parámetros del diccionario de ruta se traduce en un URI que se ve así:

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

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

15
nocarrier 28 dic. 2013 a las 21:50

En la misma línea que la respuesta de Brian Mains, puede formatear su cadena de URL en lugar de reemplazar -1 con su variable, es decir, si, como yo, juzga que es mejor leer. La siguiente respuesta asume que ha modificado el prototipo de String como se sugiere en esta respuesta:

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

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

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

Agregué Html.Raw en mi segundo ejemplo para evitar tener &amp en la cadena de url.

1
Community 23 may. 2017 a las 12:26