VB Razor 中 <script> 元素中的 Javascript 代码

Cas*_*ule 3 javascript vb.net asp.net-mvc razor

我试图在 Razor 条件视图中包含一些 JS,但它一直试图将我的 JS 解释为 VB:

@If includeMoreJs Then
    @<script type="text/javascript" src="/some-js-file.js"></script>
    <script type="text/javascript" src="/some-other-js-file.js"></script>
    <script type="text/javascript">
        function someFunction(p) {
            if (p) foo();
            else bar();
        }
    </script>
End If
Run Code Online (Sandbox Code Playgroud)

我还尝试使用<text>psuedo 元素进行此操作,如下所述:Using Razor inside JavaScript

@If includeMoreJs Then
    <text>
    <script type="text/javascript" src="/some-js-file.js"></script>
    <script type="text/javascript" src="/some-other-js-file.js"></script>
    <script type="text/javascript">
        function someFunction(p) {
            if (p) foo();
            else bar();
        }
    </script>
    </text>
End If
Run Code Online (Sandbox Code Playgroud)

但仍然没有运气......我怎样才能让VB独立于我的JS?

Rhu*_*orl 5

好吧,强迫自己创建我的第一个 .vbhtml 文件,并进行<text>谷歌搜索,您已经非常接近了。

此页面是 VB Razor 语法的一个非常好的资源。

有两种方法可以解决这个问题,具体取决于您的 html 中有多少@If

选项1:@:

每一行都需要这一点,因此通常只有在您的 中只有一行时才使用它If

@If includeMoreJs Then
    @:<script type="text/javascript" src="/some-js-file.js"></script>
    @:<script type="text/javascript" src="/some-other-js-file.js"></script>
    @:<script type="text/javascript">
    @:    function someFunction(p) {
    @:        if (p) foo();
    @:        else bar();
    @:
    @:</script>
End If
Run Code Online (Sandbox Code Playgroud)

.. 很漂亮

选项2:@<text>

因为 VB 可以具有 XML,如本答案中所述,所以纯文本<text>将被解释为 VB 代码,而不是 razor。因此,在 VB 中,与 C# 相比,您需要使用@<text>HTML 块:

@If includeMoreJs Then
    @<text>
    <script type="text/javascript" src="/some-js-file.js"></script>
    <script type="text/javascript" src="/some-other-js-file.js"></script>
    <script type="text/javascript">
        function someFunction(p) {
            if (p) foo();
            else bar();
        }
    </script>
    </text>
End If
Run Code Online (Sandbox Code Playgroud)

这解析得很好。