【问题标题】:Root relative path in MVC4 without @URL没有@URL的MVC4中的根相对路径
【发布时间】:2013-07-08 20:23:03
【问题描述】:

有人可以建议如何在您的 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 文件是单独的,并且如果您在 Google 上搜索示例,则在将相对 HTML 路径与 MVC 一起使用时,您将无法使用 @URL.Action

【问题讨论】:

标签: c# asp.net-mvc


【解决方案1】:

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

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

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

$(".ag").click(function (e) {
    var url = $(this).data("url");
});

【讨论】:

  • 这对于动态元素是不可能的。例如,如果我的 js 添加了一个新的锚标记,那么 Razor 将不会呈现为 html。
【解决方案2】:

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

【讨论】:

  • 将尽快检查此工具。
【解决方案3】:

我遇到过类似的问题。如果您的 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;
    }
}

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

【讨论】:

    【解决方案4】:

    一种方法是将 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);
        });
    });
    

    【讨论】:

      【解决方案5】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-05-09
        • 1970-01-01
        • 1970-01-01
        • 2019-09-26
        • 1970-01-01
        • 2011-11-15
        • 2018-11-05
        • 1970-01-01
        相关资源
        最近更新 更多