2011-04-10 74 views
125

我很混淆如何混合剃刀和js。这是当前功能我坚持:混合剃刀和Javascript代码

<script type="text/javascript"> 

     var data = []; 

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

如果我能与<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#> 

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

+2

显然,语法高亮是好的,弄得我''标签以及:-P – 2011-04-10 21:47:54

+1

你检查这个观点的HTML输出?它看起来如何,以及你希望它有什么不同? – sukru 2011-04-10 21:49:20

+0

抛出一个关于'Conditional Compilation'的错误,所以我看不到HTML - 所以我认为它的一部分就是C#代码。 – 2011-04-10 21:52:09

回答

271

使用<text>

<script type="text/javascript"> 

    var data = []; 

    @foreach (var r in Model.rows) 
    { 
     <text> 
      data.push([ @r.UnixTime * 1000, @r.Value ]); 
     </text> 
    } 
</script> 
+20

Razor在Javascript模块中正常工作时执行,但我讨厌语法突出显示得到各种各样的困惑。它强调所有的Razor代码都是无效的语法,因为它坚持Javascript模式我相信。 – Chev 2012-08-10 16:29:56

+2

如果这段代码捆绑在一起呢?我可以在JavaScript文件中编写代码吗? – ncubica 2013-01-28 05:06:08

+2

完美工作,直到你想检查一个变量是否小于另一个变量,剃须刀变成心理变态! – cbp 2014-12-11 01:59:49

67

在一个代码块(例如,@foreach)中,您需要标记标记(或在本例中为Javascript)with @: or the <text> tag

里面的标记环境中,你需要与周围代码块码(@{ ... }@if,...)

+0

为什么你说“标记标记”,如果内容实际上是标记,这不会成为问题。 – 2011-04-10 22:01:08

+1

@Max:尽管它看起来不像标记,但它是标记。 (而不是服务器端代码) – SLaks 2011-04-10 22:14:30

42

你也可以简单地使用

<script type="text/javascript"> 

    var data = []; 

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

note @:

-1

裹在@ {你的剃须刀代码}当JS脚本内,并注意只使用@ 有时它不工作:

function hideSurveyReminder() { 
     @Session["_isSurveyPassed"] = true; 
    } 

这将产生

function hideSurveyReminder() { 
     False = true; 
    } 
在浏览器

=(

8

永远不要混合更多的语言。

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

    for(var prop in data){ 
     console.log(prop + " "+ data[prop]); 
    } 
+0

这很棒,但也有我们需要混合的合法实例。但这是我使用的解决方案,因为它非常合适。 – frostymarvelous 2016-07-29 11:08:15

+0

请注意,这是_is_混合语言。你有一个声明是半JavaScript(“var data =”)和half-Razor/C#(“@ Json.Encode(Model)”)。这只是一种侵入性较小的混合,但与具有生成JavaScript的Razor/C#“foreach”混合在一起的混合并不少。 :-) – 2018-02-20 18:07:28