Как получить доступ к переменной JavaScript в @URL.Action()

Как я могу получить доступ к значению 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 ответов

Решение

Ты не можешь 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 });

}

НТН.

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

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

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

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

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

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

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

В том же духе, что и ответ Брайана Майнса, вы можете отформатировать строку 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.

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

var jsUrl = '@Url.Action("action", "controller")'; // ## is the token
var getUrl = jsUrl.replace('action', action).replace('controller', controller)  
$("#RenderPartial").load(getUrl); 

Вы можете создать код 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 });
}
Другие вопросы по тегам