0

有人可以建议如何在您的 Jquery 中使用 @URL.Action("name", "controller", parameters} 吗?或者至少获取主目录的相对根目录。

我必须使用 JQuery get 使用以下代码。

 $(".ag").click(function () {
    var id = this.id.replace("message_", "");
    var cd = this.id.replace("message_", "display_message_");
    $.get("/MRN/_Details_Message", function (data, status) {
        document.getElementById(cd).innerHTML = "Data: " + data + "\nStatus: " + status;
    });
});

问题是,@URL.Action如果您的 JS 文件是单独的,并且如果您在谷歌上搜索示例,则在将相对 HTML 路径与 MVC 一起使用时总是会出现抱怨。

4

5 回答 5

3

一个简单的解决方案是将 url 作为相关 html 元素的属性。

<a href="#" class="ag" data-url="@Url.Action("ActionName")">Click Here</a>

在您的 jQuery 代码中,您可以轻松地引用它:

$(".ag").click(function (e) {
    var url = $(this).data("url");
});
于 2013-07-08T20:31:14.567 回答
1

我创建了一个非常简单的 MVC 控制器来公开您需要从 javascript 访问的路由。你可以在我的 GitHub 上找到它-> https://github.com/tucaz/JSRouteController

于 2013-07-08T20:25:18.867 回答
1

我遇到过类似的问题。如果您的 JavaScript 在不同的文件中(我假设),我只是创建了一个全局函数来处理它,也就是说,如果您知道相对路径的一部分:

function getPath(p) {
    var path = "";
    if (window.location.href.indexOf("/MRN") > -1) {
        path = "/MRN";
    }
    if (path.indexOf("/", path.length - 1) !== -1) {
        return path + p;
    } else {
        return path + "/" + p;
    }
}

可能不是最好的解决方案,但它适用于我的项目。

于 2013-07-08T20:26:11.803 回答
0

一种方法是将 url 作为参数传递,并将所有有趣的 Url 呈现为页面的一部分。就像是

在页面上:

...var detailsUrl = '@Url.Action(....)';

在 JavaScript 中:

  $(".ag").click(function () {
    var resultSelector = this.data("resultselector");
    $.get(detailsUrl , function (data, status) {
        $(resultSelector).html("Data: " + data + "\nStatus: " + status);
    });
});
于 2013-07-08T20:33:03.020 回答
0

我喜欢执行以下操作,假设“MRN”是您的控制器,“_Details_Message”是您的操作:

$.get('@Url.Action("_Details_Message", "MRN")', function (data, status) {
    document.getElementById(cd).innerHTML = "Data: " + data + "\nStatus: " + status;
});

这会将根操作作为“/MRN/_Details_Message”嵌入到您的 javascript 中,并在前面加上适当的根。

于 2013-07-08T20:38:02.527 回答