为了账号安全,请及时绑定邮箱和手机立即绑定

@ Url.Content(“〜/”)在JavaScript文件中不起作用?

@ Url.Content(“〜/”)在JavaScript文件中不起作用?

繁花如伊 2021-04-02 17:15:17
我有一个ASP.NET CORE MVC应用程序,并且在其中一个视图中包含一个JavaScript文件。JavaScript用于页面上的下拉菜单,该页面调用控制器上的函数以获取该下拉菜单的数据。$(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 ”,则将正确调用控制器上的函数。解决此问题的最佳方法是什么?谢谢!
查看完整描述

2 回答

?
动漫人物

TA贡献1815条经验 获得超10个赞

@Url.Content是Razor插值指令,并且只会在Razor视图或页面文件(.cshtml)中进行解析。Razor视图引擎没有其他功能,因此不能期望它在CSHTML文件以外的任何文件中都可以工作。


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


1.从引用此文件的视图中提供一个全局变量

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.让脚本公开一个函数并从视图中调用它

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>


查看完整回答
反对 回复 2021-04-15
?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

一种解决方案是在一个布局cshtml文件中创建一个包含您的URL的变量,该变量在您使用JavaScript文件的任何地方都将使用,然后您可以在JS文件中简单地调用此变量。

例子 :

websiteUrl = '@Url.Content("~/")';

您只需要使用websiteUrl。


查看完整回答
反对 回复 2021-04-15
  • 2 回答
  • 0 关注
  • 392 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号