混合Razor和Javascript代码

Kyl*_*ndt 164 javascript c# razor

我对如何混合剃刀和js很困惑.这是我坚持的当前功能:

<script type="text/javascript">

        var data = [];

        @foreach (var r in Model.rows)
        {
                data.push([ @r.UnixTime * 1000, @r.Value ]);
        }
Run Code Online (Sandbox Code Playgroud)

如果我可以声明c#代码<c#></c#>而其他一切都是JS代码 - 这就是我所追求的:

<script type="text/javascript">

        var data = [];

        <c#>@foreach (var r in Model.rows) {</c#>
                data.push([ <c#>@r.UnixTime</c#> * 1000, <c#>@r.Value</c#> ]);
        <c#>}</c#>
Run Code Online (Sandbox Code Playgroud)

实现这一目标的最佳方法是什么?

Max*_*oro 319

用途<text>:

<script type="text/javascript">

   var data = [];

   @foreach (var r in Model.rows)
   {
      <text>
            data.push([ @r.UnixTime * 1000, @r.Value ]);
      </text>
   }
</script>
Run Code Online (Sandbox Code Playgroud)

  • Razor在执行时在Javascript块中运行良好,但我讨厌语法高亮显示如何被各种混淆.它将所有Razor代码强调为无效的语法,因为它坚持Javascript模式我相信. (26认同)
  • 如果这个代码在一个包中呢?我可以在javascript文件中编写代码吗? (2认同)
  • 完美的工作,直到你想检查一个变量是否小于另一个变量,剃刀是精神病! (2认同)
  • @ncubica 这篇文章很旧,但解决您的问题的方法是:在 JS 文件中编写一个函数,使用 `Scripts.Render` 渲染它,然后在 `&lt;script&gt;` 标签中调用该函数。不完全优雅,但它适用于大多数(阅读:简单)用例。 (2认同)

SLa*_*aks 80

里面一个代码块(例如,@foreach),你需要标记标记(或者,在这种情况下,JavaScript)的使用@:<text>标签.

在标记上下文中,您需要使用代码块(@{ ... }@if......)来包围代码

  • @Max:尽管它看起来不像标记,但它是标记。(与服务器端代码相反) (2认同)

Med*_*uly 50

你也可以简单地使用

<script type="text/javascript">

   var data = [];

   @foreach (var r in Model.rows)
   {
       @:data.push([ @r.UnixTime * 1000, @r.Value ]);
   }
</script>
Run Code Online (Sandbox Code Playgroud)

注意@:


Mer*_*rez 12

永远不要混合更多语言.

<script type="text/javascript">
    var data = @Json.Encode(Model); // !!!! export data !!!!

    for(var prop in data){
      console.log( prop + " "+ data[prop]);
    }
Run Code Online (Sandbox Code Playgroud)

  • 请注意,这是_is_混合语言.你有一个半JavaScript("var data =")和半Razor/C#("@ Json.Encode(Model)")的语句.它只是一种侵入性较小的混合,但它的混合程度不亚于Razor/C#"foreach",它的身体会发出生成的JavaScript.:-) (2认同)
  • 它返回`Uncaught SyntaxError:Unexpected token&`,因为模型变成了类似这样的东西[[{“ Id”:1,“ Name” ::“ Name}]` (2认同)