Как закодировать эквивалент @Html.ActionLink через javascript-код, то есть вызвать действие MVC, которое затем создаст новый View, не возвращаясь к вызывающему виду?
MVC эквивалент @Html.ActionLink через javascript
Ответ 1
javascript
- это язык на стороне клиента, который ничего не знает о используемом вами языке на стороне сервера. Таким образом, это нормально, что в javascript помощника на стороне сервера нет эквивалента, который генерирует URL-адрес, используя определения маршрутов на стороне сервера.
Не совсем понятно, чего вы пытаетесь достичь, но если вы хотите использовать вызов некоторого URL-адреса через javascript, вы можете сгенерировать этот URL-адрес с помощью помощника на стороне сервера:
<script type="text/javascript">
var url = '@Url.Action("SomeAction", "SomeController")';
// do something with the url client side variable, for example redirect
window.location.href = url;
</script>
Если вы хотите использовать этот URL-адрес в отдельном файле javascript, где у вас нет доступа к помощникам на стороне сервера, вы все равно можете в зависимости от ситуации включить этот URL-адрес в некоторый элемент DOM.
Например:
<div id="foo" data-url="@Url.Action("SomeAction", "SomeController")">Click me</div>
Обратите внимание на атрибут data-url
HTML5, который мы встроили в DOM, и использовал вспомогательный сервер на стороне сервера, чтобы гарантировать, что сгенерированный URL всегда будет правильным на основе наших определений маршрутизации. Теперь мы можем в отдельном файле javascript незаметно подписаться на событие click этого div и получить URL-адрес:
$('#foo').click(function() {
var url = $(this).data('url');
// do something with the url client side variable, for example redirect
window.location.href = url;
});
Другие примеры, очевидно, включают стандартные элементы <a>
и <form>
, которые должны быть сгенерированы с использованием HTML-помощников на стороне сервера, а затем все, что вам нужно сделать в отдельном файле javascript, - это получить их соответствующие href
или action
атрибуты для получения фактического URL-адреса и сделать что-то с ним.
Ответ 2
Другой вариант - сохранить URL-адрес в скрытом <div>
где-то на вашей странице и вызвать его через Javascript позже. Это будет выглядеть так:
Index.cshtml
<div style="display: none;" id="url">
@Url.Action("SomeAction", "SomeController")
</div>
Затем вы можете использовать его в своем файле Script.js для создания любых ссылок, которые вы хотите.
var url = $("#url").text();
Затем переменная URL будет содержать ссылку websafe на /SomeController/SomeAction
.