web-dev-qa-db-fra.com

Comment accéder à une 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>
72
Bolu

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.

131
Brian Mains

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."

14
nocarrier

Vous pouvez transmettre les variables à n’importe quel lien, comme indiqué ci-dessous ...

var url = '@Html.Raw(@Url.Action("MethodName", "ControllerName"))' + '?id = ' + myjavascriptID
10
games

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 &amp dans la chaîne d'URL.

0
actaram

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); 
0
Joh

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 });
}
0
xMaa