Razor View Engine和jQuery

时间:2010-08-24 11:59:00

标签: jquery razor

是否有人知道如何强制Razor View引擎打印foreach循环下的确切行。代码如下:

@section head{
<script type="text/javascript" src="@Url.Content("~/Content/Scripts/jquery-1.4.1.js")"></script>
<script type="text/javascript" src="@Url.Content("~/Content/Scripts/jquery.progressbar.min.js")"></script>

<script type="text/javascript">

    $(document).ready(function() {
        @foreach(var player in Model)
        {
            jQuery("#pb@PlayerID").progressBar();
        }
    });
</script>

}

我尝试使用$()和jQuery(),但在两种情况下剃刀都不知道该怎么做。有没有办法迫使他打印出这个: jQuery(“#pb @ PlayerID”)。progressBar(); 。我想要这样的东西:

$(document).ready(function() {
    $("#pb1").progressBar();
    $("#pb2").progressBar();
    $("#pb3").progressBar();

});

提前谢谢!

2 个答案:

答案 0 :(得分:22)

在@foreach块中,除非您切换回标记,否则默认情况下内容为代码。所以“jQuery(...)。progressBar()”行被认为是C#。在这种情况下,如果您希望标记不是HTML,则可以使用&lt; text&gt;标签,实际上没有呈现OR或“@:”指令,指示Razor将其余部分视为标记,无论它包含什么(当然,您可以在行内使用“@”来嵌套更多代码块)。

此外,“pb @ PlayerID”看起来像是Razor的电子邮件地址,所以它忽略了它。您可以使用@()explict表达式语法来避免这种情况。所以@foreach块应该如下所示:

@foreach(var player in Model)
{
    @: jQuery("#pb@(PlayerID)").progressBar();
}

答案 1 :(得分:3)

Scott Gu的这句very helpful article解释了你需要知道的一切 - 而且几乎涵盖了所有情况。

这是明确的&lt; text&gt; @Manticore提到的风格 - 文章中有更多的例子。

alt text