Comment accéder à la variable javascript dans @ URL.Action ()

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 &amp 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 }); }