Razor视图引擎和jQuery

12

有人知道如何强制 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(),但在这两种情况下,razor都不知道该怎么做。 是否有办法强制他输出与此完全相同的内容:jQuery("#pb@PlayerID").progressBar();。 我想要像这样的东西:

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

});

提前感谢您!

2个回答

22

在@foreach块内,默认情况下内容是代码,除非你切换回标记语言。因此,“jQuery(...)。 progressBar()”行被认为是C#。在这种情况下,当您需要不是HTML的标记时,可以使用<text>标记,它实际上不会被呈现,或者使用“@:”指令,该指令指示Razor将其余部分视为标记,无论它包含什么(当然,您可以在行内使用“@”来嵌套更多的代码块)。

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

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

不错!顺便说一下,我想你的意思是“...你可以使用文本标签”,而不是“你可以使用标签”。也许这是被 SO 引擎剥离了。 - aolde

3

这篇由Scott Gu写的非常有用的文章解释了你需要知道的所有内容,并几乎涵盖了每种情况。

这是@Manticore提到的显式<text>样式 - 文章中还有更多示例。

alt text


2
这是来自Phil Haack的更简洁的Razor速查表:http://haacked.com/archive/2011/01/06/razor-syntax-quick-reference.aspx - Simon_Weaver

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接