Использование 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, который вы генерируете выше определения маршрута по умолчанию.

Другие вопросы по тегам