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>
Tu ne peux pas. JavaScript ne s'exécute pas lors de la génération de l'URL de l'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 similaire, mais moins verbeux:
var myUrl = '@Url.Action("Solution","Partner")/' + myjavascriptID;
$.ajax.load(myUrl); // or whatever
Nous pouvons le faire à cause du routage, et finalement, Url.Action avec les paramètres du dictionnaire de routage se traduit par un URI ressemblant à ceci:
http://localhost:41215/Partner/Solution?myJavascriptID=7
Juste un deuxième choix, parce que le vieil homme sage a dit: "Ce sont nos choix, Harry, qui montrent ce que nous sommes vraiment, bien plus que nos capacités."
Vous pouvez transmettre 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 d'URL au lieu de remplacer -1 par votre variable, c'est-à-dire si comme moi, vous jugez qu'il est préférable de lire. La réponse suivante suppose que vous avez modifié le prototype de String
comme suggéré dans cette réponse :
var url = unescape('@Url.Action("download file", "download", new { id = "{0}" })').format(myjavascriptID);
L’appel 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 de 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 d'URL.
Vous pouvez remplacer l'URL comme le code ci-dessous
var jsUrl = '@Url.Action("action", "controller")'; // ## is the token
var getUrl = jsUrl.replace('action', action).replace('controller', controller)
$("#RenderPartial").load(getUrl);
Vous pouvez construire 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 });
}