Comment puis-je accéder à la valeur JavaScript à l'intérieur de @URL.Action()
? quelque chose comme:
<script type="text/javascript"> function name(myjavascriptID) { jQuery("#list_d").jqGrid('setGridParam', { url: '@URL.Action("download file", "download", new { id = <myjavascriptID> })', page: 1 }); } </script>
Vous ne pouvez pas. JavaScript ne s'exécute pas lors de la génération de l'URL d'action. Ce que vous pouvez faire, c'est faire quelque chose comme ça:
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.
Je fais quelque chose d'assez semblable, mais moins détaillé:
var myUrl = '@Url.Action("Solution","Partner")/' + myjavascriptID; $.ajax.load(myUrl); // or whatever
Nous pouvons le faire en raison du routage, et finalement Url.Action avec les paramètres du dictionnaire de route se traduit par un URI qui ressemble à:
http://localhost:41215/Partner/Solution?myJavascriptID=7
Juste un deuxième choix, parce que comme un vieillard sage a dit une fois: "Ce sont nos choix, Harry, qui montrent ce que nous sommes vraiment, beaucoup plus que nos capacités".
Vous pouvez passer les variables à n'importe quel lien comme indiqué ci-dessous …
var url = '@Html.Raw(@Url.Action("MethodName", "ControllerName"))' + '?id = ' + myjavascriptID
Dans la même veine que la réponse de Brian Mains, vous pouvez formater votre chaîne url au lieu de remplacer -1 par votre variable, c'est comme si, vous jugez qu'il vaut mieux lire. La réponse suivante suppose que vous avez modifié le prototype de String
comme indiqué dans cette réponse :
var url = unescape('@Url.Action("download file", "download", new { id = "{0}" })').format(myjavascriptID);
L'appel d' unescape
est nécessaire si vous souhaitez décoder votre {0}
. J'aime cette alternative, car il est plus facile d'avoir plusieurs paramètres à partir des variables JS. Par exemple:
var url = unescape('@Html.Raw(Url.Action("Action", "Controller", new { id = "{0}", name = "{1}" }))').format(myID, myName);
J'ai ajouté Html.Raw
dans mon deuxième exemple afin d'éviter d'avoir &
dans la chaîne url.
Vous pouvez créer le code JavaScript en C # de cette façon:
function fun(jsId) { var aTag = '<a href="@Html.Raw(@Url.Action("ActionName", "ControllerName", new { objectId = "xxx01xxx" }).Replace("xxx01xxx", "' + jsId + '"))">LINK</a>'; }
Voici le code de la question réécrite en utilisant cette technique:
function name(myjavascriptID) { jQuery("#list_d").jqGrid('setGridParam', { url: '@Html.Raw(@URL.Action("download file", "download", new { id = "XXXmyjavascriptIDXXX" }).Replace("XXXmyjavascriptIDXXX", "' + myjavascriptID + '"))', page: 1 }); }