1

我有一个使用大量 AJAX 的网站,为了将 Urls 之类的东西放在一个合理的地方,我在页面上的脚本块中输出所需的 Urls,然后在 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操作。这是因为在生成它的时候我们给了它一个empty id,所以当我们开始使用它时,请求的Url实际上是/frontoffic/55', not/frontoffice/index/55'..

UrlHelper似乎正在从 url 中剔除操作名称。我可以使用另一种方法来不从 URL 中删除项目吗?- 我希望能有一个清晰的、可重复使用的解决方案,因为这种事情发生在整个网站上。

谢谢基

4

2 回答 2

2

您可以为 id 使用占位符。

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: ...
        });
    });
});
于 2011-05-26T21:52:38.337 回答
0

这可能需要在您的路线定义中加以注意。你可能仍然有这样的定义:

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

一方面,我可能会删除它或将一些明确定义您正在生成的 URL 的内容放在默认路由定义之上。

于 2011-05-23T17:57:42.393 回答