2 回答
TA贡献1851条经验 获得超4个赞
@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>
一些脚本.js
$(document).ready(function() {
var url = Routes.getMeters;
// ...
});
2.让脚本公开一个函数并从视图中调用它
一些脚本.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>
TA贡献1852条经验 获得超7个赞
一种解决方案是在布局 cshtml 文件中创建一个包含您的 url 的变量,该文件在您使用 javascript 文件的任何地方使用,然后您可以简单地在 JS 文件中调用此变量。
例子 :
websiteUrl = '@Url.Content("~/")';
您只需要使用 websiteUrl。
- 2 回答
- 0 关注
- 244 浏览
添加回答
举报