外部 JavaScript 在具有 window.refresh 功能时不起作用
External JavaScript not working when it has window.refresh function
所以我有一个 Visual Studio ASP.NET MVC 项目。我在 CSHTML 文件的视图中有一堆重复的 javascript,我试图将所有重复的代码外部化到一个通用的 JS 文件中。
问题是每当外部文件中的 ANNY 函数都有此代码时
window.refresh("@Url.Action("","")");
那么整个外部文件就不能再工作了。
有人知道为什么会这样吗?
您不能在 javascripts 文件中使用 Razor sintax。
@Url.Action("","") returns 一个 MvcHtmlString(Html 代码)。并且您至少需要传递操作名称。
我不明白为什么要调用@Html.Action作为window.refresh的参数。你能展示一下帮助我们帮助你的完整功能吗?
.cshtml 文件是使用 Razor 视图引擎并编译 在发送到客户端(浏览器)之前在服务器上作为普通 html.
当您在 .cshtml 中使用 Razor 语法包含 <script>
标记时,它会被编译在它被发送到浏览器并包含编译信息之前。
示例.cshtml:
<header>
<h1>@ViewBag.Title</h1>
</header>
<script>
window.refresh("@Url.Action("Index","Home")");
</script>
<footer>
Example Code
</footer>
编译为:
<header>
<h1>My Title</h1>
</header>
<script>
window.refresh("/");
</script>
<footer>
Example Code
</footer>
如果将脚本移动到单独的 .js 文件中,Razor 视图引擎将不会对其进行编译。只会编译 .cshtml 文件中的内容。 .js 文件将由客户端(浏览器)请求和处理。因此,脚本 window.refresh("@Url.Action("Index","Home")");
不会包含已编译的 @Url.Action
.
根据您的情况和设置,您可以考虑创建一个变量或函数。
示例新 .cshtml:
<header>
<h1>@ViewBag.Title</h1>
</header>
<script>
var refreshLocation = '@Url.Action("Index","Home")';
</script>
<footer>
Example Code
</footer>
编译为:
<header>
<h1>My Title</h1>
</header>
<script>
var refreshLocation = '/';
</script>
<footer>
Example Code
</footer>
然后在外部脚本中您可以使用 refreshLocation
代替 @Url.Action("Index","Home")
。
注意:最好不要向全局 window
对象添加值(在本例中为 window.refreshLocation
)。我在这个解释中使用全局 refreshLocation
只是为了简单起见。
所以我有一个 Visual Studio ASP.NET MVC 项目。我在 CSHTML 文件的视图中有一堆重复的 javascript,我试图将所有重复的代码外部化到一个通用的 JS 文件中。
问题是每当外部文件中的 ANNY 函数都有此代码时
window.refresh("@Url.Action("","")");
那么整个外部文件就不能再工作了。
有人知道为什么会这样吗?
您不能在 javascripts 文件中使用 Razor sintax。
@Url.Action("","") returns 一个 MvcHtmlString(Html 代码)。并且您至少需要传递操作名称。
我不明白为什么要调用@Html.Action作为window.refresh的参数。你能展示一下帮助我们帮助你的完整功能吗?
.cshtml 文件是使用 Razor 视图引擎并编译 在发送到客户端(浏览器)之前在服务器上作为普通 html.
当您在 .cshtml 中使用 Razor 语法包含 <script>
标记时,它会被编译在它被发送到浏览器并包含编译信息之前。
示例.cshtml:
<header>
<h1>@ViewBag.Title</h1>
</header>
<script>
window.refresh("@Url.Action("Index","Home")");
</script>
<footer>
Example Code
</footer>
编译为:
<header>
<h1>My Title</h1>
</header>
<script>
window.refresh("/");
</script>
<footer>
Example Code
</footer>
如果将脚本移动到单独的 .js 文件中,Razor 视图引擎将不会对其进行编译。只会编译 .cshtml 文件中的内容。 .js 文件将由客户端(浏览器)请求和处理。因此,脚本 window.refresh("@Url.Action("Index","Home")");
不会包含已编译的 @Url.Action
.
根据您的情况和设置,您可以考虑创建一个变量或函数。
示例新 .cshtml:
<header>
<h1>@ViewBag.Title</h1>
</header>
<script>
var refreshLocation = '@Url.Action("Index","Home")';
</script>
<footer>
Example Code
</footer>
编译为:
<header>
<h1>My Title</h1>
</header>
<script>
var refreshLocation = '/';
</script>
<footer>
Example Code
</footer>
然后在外部脚本中您可以使用 refreshLocation
代替 @Url.Action("Index","Home")
。
注意:最好不要向全局 window
对象添加值(在本例中为 window.refreshLocation
)。我在这个解释中使用全局 refreshLocation
只是为了简单起见。