Как получить доступ к переменной javascript в @ URL.Action () - PullRequest
70 голосов
/ 23 июня 2011

Как я могу получить доступ к значению JavaScript внутри @URL.Action()?что-то вроде:

<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 ]

130 голосов
/ 23 июня 2011

Вы не можете.JavaScript не выполняется при создании URL-адреса действия.Что вы можете сделать, это сделать что-то вроде этого:

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.

14 голосов
/ 29 декабря 2013

Я делаю что-то довольно похожее, но менее многословное:

var myUrl = '@Url.Action("Solution","Partner")/' + myjavascriptID;
$.ajax.load(myUrl); // or whatever

Мы можем сделать это из-за маршрутизации и, в конечном счете, Url.Action с параметрами словаря маршрутизации преобразуется в URI, который выглядит следующим образом:

http://localhost:41215/Partner/Solution?myJavascriptID=7

Просто второй выбор, потому что, как однажды сказал мудрый старик: «Это наш выбор, Гарри, который показывает, кто мы есть на самом деле, гораздо больше, чем наши способности».

9 голосов
/ 07 апреля 2014

Вы можете передать переменные любой ссылке, как показано ниже ...

var url = '@Html.Raw(@Url.Action("MethodName", "ControllerName"))' + '?id = ' + myjavascriptID
0 голосов
/ 26 марта 2018

Вы можете заменить URL, как показано ниже

var jsUrl = '@Url.Action("action", "controller")'; // ## is the token
var getUrl = jsUrl.replace('action', action).replace('controller', controller)  
$("#RenderPartial").load(getUrl); 
0 голосов
/ 27 июля 2016

В том же ключе, что и ответ Брайана Майнса, вы можете отформатировать строку url вместо замены -1 на переменную, то есть если, как и я, вы считаете, что лучше читать.Следующий ответ предполагает, что вы изменили прототип String, как предложено в в этом ответе :

var url = unescape('@Url.Action("download file", "download", new { id = "{0}" })').format(myjavascriptID);

Вызов unescape необходим, если вы хотите декодировать ваш {0}.Мне нравится эта альтернатива, потому что она облегчает получение нескольких параметров из переменных JS.Например:

var url = unescape('@Html.Raw(Url.Action("Action", "Controller", new { id = "{0}", name = "{1}" }))').format(myID, myName);

Я добавил Html.Raw во втором своем примере, чтобы избежать наличия &amp в строке URL.

0 голосов
/ 24 июня 2016

Вы можете построить код JavaScript в C # следующим образом:

function fun(jsId) {
  var aTag = '<a href="@Html.Raw(@Url.Action("ActionName", "ControllerName", new { objectId = "xxx01xxx" }).Replace("xxx01xxx", "' + jsId + '"))">LINK</a>';
}

Вот код вопроса, переписанный с использованием этой техники:

function name(myjavascriptID) {
  jQuery("#list_d").jqGrid('setGridParam', { url: '@Html.Raw(@URL.Action("download file", "download", new { id = "XXXmyjavascriptIDXXX" }).Replace("XXXmyjavascriptIDXXX", "' + myjavascriptID + '"))', page: 1 });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...