asp.net mvc 3 - 使用不带路由值的 Url.Action 会截断 URL



我有一个网站大量使用AJAX,为了将Urls之类的东西保存在合理的位置,我将所需的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/index/55'。

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

谢谢
基隆

您可以使用占位符作为 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: ...
        });
    });
});

这可能需要在路由定义中处理。您可能仍然定义了类似以下内容:

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

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

相关内容

  • 没有找到相关文章

最新更新