Как получить доступ к переменной 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>
Ответы
Ответ 1
Вы не можете. 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 });
}
НТН.
Ответ 2
Я делаю что-то довольно похожее, но менее подробное:
var myUrl = '@Url.Action("Solution","Partner")/' + myjavascriptID;
$.ajax.load(myUrl); // or whatever
Мы можем сделать это из-за маршрутизации, и в конечном итоге Url.Action с параметрами словаря маршрута преобразуется в URI, который выглядит следующим образом:
http://localhost:41215/Partner/Solution?myJavascriptID=7
Просто второй выбор, потому что, как мудрый старик однажды сказал: "Это наш выбор, Гарри, это показывает, что мы на самом деле, гораздо больше, чем наши способности".
Ответ 3
Вы можете передать переменные на любую ссылку, как показано ниже...
var url = '@Html.Raw(@Url.Action("MethodName", "ControllerName"))' + '?id = ' + myjavascriptID
Ответ 4
Вы можете создать код JavaScript на С# следующим образом:
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 });
}
Ответ 5
В том же духе, что и Брайан Майнс, вы можете форматировать строку 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
в свой второй пример, чтобы избежать &
в строке url.