如何在ASP.NET Core 3.1视图脚本中指定本地JSON文件路径
解决ASP.NET Core 3.1中DataTables本地波斯语文件路径问题
嘿,我来帮你搞定这个路径问题!你遇到的核心问题是:客户端JavaScript不认识ASP.NET Core的~路径前缀——这个前缀是服务器端Razor引擎用来指代网站根目录的,直接写在JS里浏览器根本不知道它是什么意思。下面给你两种靠谱的解决方案:
方案1:在Razor视图中使用服务器端路径生成(最直接)
在你的Razor视图(.cshtml文件)里,用ASP.NET Core的@Url.Content()方法把~/js/Persian.json转换成客户端能识别的绝对路径。修改后的脚本如下:
<script language="JavaScript" type="text/javascript" src="~/js/datatables.min.js"></script> <script> jQuery(document).ready(function ($) { $("#myDummyTable").DataTable({ //"searching": false, "language": { "url": '@Url.Content("~/js/Persian.json")' } }); }); </script>
当Razor渲染页面时,@Url.Content()会把~替换成你的网站根路径(比如http://yourdomain.com/),最终生成的URL会是类似/js/Persian.json的格式,浏览器就能正确找到本地文件了。
方案2:全局根路径变量(适合单独JS文件)
如果你的DataTables初始化代码是放在单独的.js文件里(不是直接写在Razor视图中),那没法直接用Razor语法。这时候可以在布局页(_Layout.cshtml)里定义一个全局变量,把网站根路径传递给客户端:
<!-- 在_Layout.cshtml的<head>或底部脚本区添加 --> <script> window.siteRoot = '@Url.Content("~/")'; </script>
然后在你的JS文件里,用这个全局变量拼接路径:
jQuery(document).ready(function ($) { $("#myDummyTable").DataTable({ //"searching": false, "language": { "url": window.siteRoot + "js/Persian.json" } }); });
额外注意事项
- 确保
Persian.json文件的属性设置正确:在Visual Studio中右键该文件→属性→“复制到输出目录”选择“如果较新则复制”或“始终复制”,这样发布项目时文件会被正确部署到wwwroot/js目录下。 - 也可以直接用绝对路径(比如
/js/Persian.json),但这种方式依赖页面所在的位置,如果你的页面在子目录里,可能会出问题,所以还是用服务器端生成路径更可靠。
内容的提问来源于stack exchange,提问作者MinaMRM
相关产品推荐
相关产品推荐

