Использование Url.Action без значений маршрута усекает URL - PullRequest
1 голос
/ 23 мая 2011

У меня есть сайт, который интенсивно использует AJAX, и для того, чтобы держать такие вещи, как URL-адреса, в разумном месте, я вывожу необходимые URL-адреса в блоке скрипта на странице, а затем использую ихв файле Javascript позже.

Примером этого может быть:

In 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 / index / 55 '..

.UrlHelper, кажется, отбирает название действия из URL.Есть ли другой метод, который я могу использовать, который не удаляет элементы из URL?- Я надеялся получить ясное, многократно используемое решение, поскольку подобные вещи происходят по всему сайту.

СпасибоКирон

Ответы [ 2 ]

2 голосов
/ 27 мая 2011

Вы можете использовать заполнитель для идентификатора.

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: ...
        });
    });
});
0 голосов
/ 23 мая 2011

Это, вероятно, необходимо учитывать в определениях вашего маршрута.Вероятно, у вас все еще есть что-то вроде этого:

routes.MapRoute("Default", "{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = UrlParameter.Optional});

Для одного я бы, вероятно, удалил это или поместил бы что-то, что явно определяет URL, который вы генерируете выше определения маршрута по умолчанию.

...