外部 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 只是为了简单起见。