没有@URL的MVC4中的根相对路径

时间:2013-07-08 20:23:03

标签: c# asp.net-mvc

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

我必须使用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;
    });
});

问题是,如果您的JS文件是独立的,则不能使用@URL.Action,如果您使用谷歌示例,则在使用MVC的相对HTML路径时总会抱怨。

5 个答案:

答案 0 :(得分: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");
});

答案 1 :(得分:1)

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

答案 2 :(得分: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;
    }
}

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

答案 3 :(得分: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);
    });
});

答案 4 :(得分:0)

我喜欢这样做,假设“MRN”是你的控制器而“_Details_Message”是你的行动:

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

这会将根操作嵌入到您的javascript中,并将“/ MRN / _Details_Message”嵌入正确的根目录。

相关问题