Как получить доступ к переменной javascript в @URL.Действие()
Как я могу получить доступ к значению 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 }); }HTH.
Я делаю что-то довольно похожее, но менее многословное:
var myUrl = '@Url.Action("Solution","Partner")/' + myjavascriptID; $.ajax.load(myUrl); // or whateverмы можем сделать это из-за маршрутизации, и в конечном итоге Url.Действие с параметрами словаря маршрутов преобразуется в URI, который выглядит следующим образом:
http://localhost:41215/Partner/Solution?myJavascriptID=7
вы можете передать переменные в любую ссылку, как показано ниже...
var url = '@Html.Raw(@Url.Action("MethodName", "ControllerName"))' + '?id = ' + myjavascriptID
Вы можете построить код 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 }); }
в том же духе, что и ответ Брайана Мейнса, вы можете отформатировать свою строку url вместо замены -1 своей переменной, то есть, если вы, как и я, считаете, что лучше читать. Следующий ответ предполагает, что вы изменили
Stringпрототип как предложено в ответ:var url = unescape('@Url.Action("download file", "download", new { id = "{0}" })').format(myjavascriptID);The
unescapeвызов необходим, если вы хотите декодировать ваш{0}. Мне нравится эта альтернатива, потому что она упрощает использование нескольких параметров из переменных JS. Для пример:var url = unescape('@Html.Raw(Url.Action("Action", "Controller", new { id = "{0}", name = "{1}" }))').format(myID, myName);добавил
Html.Rawв моем втором примере, чтобы избежать&в строке url.
вы можете заменить url, как код ниже
var jsUrl = '@Url.Action("action", "controller")'; // ## is the token var getUrl = jsUrl.replace('action', action).replace('controller', controller) $("#RenderPartial").load(getUrl);
Comments