¿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>
6 respuestas
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 });
}
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);
Puede pasar las variables a cualquier enlace como se muestra a continuación ...
var url = '@Html.Raw(@Url.Action("MethodName", "ControllerName"))' + '?id = ' + myjavascriptID
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 });
}
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".
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 &
en la cadena de url.
Preguntas relacionadas
Preguntas vinculadas
Nuevas preguntas
javascript
Para preguntas sobre la programación en ECMAScript (JavaScript / JS) y sus diversos dialectos / implementaciones (excepto ActionScript). Incluya todas las etiquetas relevantes en su pregunta; por ejemplo, [node.js], [jquery], [json], etc.