javascript - @Url.Content ("~/") 无法在 JavaScript 文件中工作?

标签 javascript c# asp.net-core

我有一个 ASP.NET CORE MVC 应用程序,并且我在我的 View 之一中包含了一个 JavaScript 文件。 JavaScript 用于页面上的下拉菜单,它调用 Controller 上的函数来获取下拉菜单的数据。

$(document).ready(function() {

    $('#accounts').change(function() {
        var url = '@Url.Content("~/")' + "GetMeters";
        var ddlsource = "#accounts";

        $.getJSON(url,
            { accountId: $(ddlsource).val() },
            function(data) {
                var items = '';
                $("#meters").empty();
                $.each(data,
                    function(i, meter) {
                        items += "<option value='" + meter.value + "'>" + meter.text + "</option>";
                    });
                $('#meters').html(items);
            });
    });

});

单步执行代码,我注意到在 'var url = '@Url.Content("~/")' + "GetMeters";' 之后执行后,“url”设置为“@Url.Content("~/")GetMeters”。

在 StackOverflow 上查看类似问题,因此我尝试仅使用“~/GetMeters”,但它也不起作用。

如果 url 设置为“https://localhost:44344/Meters/GetMeters” ' 我在 Controller 上的函数将被正确调用。解决这个问题的最佳方法是什么?谢谢!

最佳答案

@Url.Content 是 Razor 插值指令,并且只能在 Razor View 或页面文件 (.cshtml) 中进行解析。 Razor View 引擎不经过任何其他操作,因此不能指望它能在 CSHTML 文件以外的任何文件中工作。

有多种方法可以在页面加载时将服务器端数据传递到 JavaScript 文件 - 比 StackOverflow 答案中可以涵盖的方法更多。对于您的特定情况,似乎您只需将 URL 根传递给脚本,以便它可以调用端点。如果可能的话,通常最好在服务器端完全呈现操作 URL,而不是在客户端构建它们。为此,您可以使用以下方法之一。

1。从引用此文件的 View 中提供一个全局变量

SomeView.cshtml

<script>
window.Routes = {
    getMeters: '@Url.Action("GetMeters", "Meters")', // the GetMeters action on MetersController
    // add other routes here
};
</script>

<script src="@Url.Content("~/somescript.js")"></script>

somescript.js

$(document).ready(function() {
    var url = Routes.getMeters;
    // ...
});

2。让脚本公开一个函数并从 View 中调用它

somescript.js

// This function replaces $(document).ready(...)
function initialize(getMetersRoute) {
    var url = getMetersRoute;
    // ...
}

SomeView.cshtml

<script src="@Url.Content("~/somescript.js")"></script>

<script>
$(document).ready(function() {
    initialize('@Url.Action("GetMeters", "Meters")');
});
</script>

关于javascript - @Url.Content ("~/") 无法在 JavaScript 文件中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55477199/

相关文章:

javascript - 获取 Dexie 中的 GroupBy 计数

c# - Azure 通信服务 - 如何针对 Azure IAM 进行身份验证

c# - 禁用浏览器后退按钮,但在我的 asp.net 应用程序中保持启用状态

c# - 我的后台工作人员报告超过 100%

c# - WinForms 数据绑定(bind)

c# - 在 using 语句中操作流

c# - ASP.NET Core 中的自定义路由

javascript - 在两个 Node 实例之间共享对象

javascript - Unity C# 如何正确加载托管 DLL?

javascript - 在 viewConfig 属性的 getRowClass 中分配颜色代码后,背景颜色不会改变