Использование Url.Action без значений маршрута усекает URL
У меня есть сайт, который интенсивно использует AJAX, и для того, чтобы держать такие вещи, как URL-адреса, в разумном месте, я вывожу требуемые URL-адреса в блоке сценария на странице, а затем использую их в Javascript файл позже.
Примером этого может быть:
В Index.cshtml
<script>
if (!app.frontoffice)
app.frontoffice = {};
if (!app.frontoffice.urls)
app.frontoffice.urls = {};
if (!app.frontoffice.urls.index)
app.frontoffice.urls.index = "@Url.Action("index", "frontoffice", new { area = string.Empty, id = string.Empty })";
</script>
Где-то в файле JS
$(function() {
$("myButton").click(function(e) {
$.ajax({
url: app.frontoffice.urls.index,
data: {
id: 55
},
success: ...
error: ...
});
});
});
Проблема в том, что сгенерированный URL создается так - /frontoffice
обратите внимание, что это исключает index
действие. Это потому, что когда он был создан, мы дали ему пустое id
поэтому, когда мы используем его, запрашиваемый URL-адрес на самом деле /frontoffic/55', not
/ FrontOffice/ индекс /55'..
UrlHelper
похоже отбирает название действия из URL. Есть ли другой метод, который я могу использовать, который не удаляет элементы из URL? - Я надеялся получить ясное, многократно используемое решение, поскольку подобные вещи происходят по всему сайту.
Спасибо
Кирон
2 ответа
Вы можете использовать заполнитель для идентификатора.
app.frontoffice.urls.index = function (id) {
return "@Url.Action("index", "frontoffice", new { id = "000" })".replace('000', id);
}
Тогда в вашем файле.js
$(function() {
$("myButton").click(function(e) {
$.ajax({
url: app.frontoffice.urls.index(55),
success: ...
error: ...
});
});
});
Вероятно, об этом нужно позаботиться в определениях вашего маршрута. Вы, вероятно, еще что-то вроде этого определены:
routes.MapRoute("Default", "{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional});
Для одного я, вероятно, удалил бы это или поместил бы что-то, что явно определяет URL, который вы генерируете выше определения маршрута по умолчанию.