是否有人知道如何强制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();
});
提前谢谢!
答案 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提到的风格 - 文章中有更多的例子。