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

时间:2014-12-03 21:23:48

标签: javascript asp.net-mvc vb.net 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

我也尝试使用<text> psuedo元素,如下所述:Using Razor within 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

但仍然没有运气......我怎么能让VB单独留下我的JS?

1 个答案:

答案 0 :(得分:2)

好了,我强迫自己创建我的第一个.vbhtml文件,然后用Google搜索,你几乎就在<text>块。

This page是VB Razor语法的一个非常好的资源。

有两种方法可以解决这个问题,具体取决于@If中的html数量:

选项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

..很漂亮

选项2:@<text>

因为VB可以具有this answer中所述的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

这解析得很好。