Razor 引擎 if else 语句

Razor engine if else statement

当我使用 Razor 引擎评估模板并且只想打印包含在 If 语句中的整个块时,我真的必须用“@:”标记每一行吗:

@if(Model.Labels)
{
    @:arcs.append("text")
    @:.attr("transform", function (d) {
        @:var c = arc.centroid(d),
            @:x = c[0],
            @:y = c[1],
            @:// pythagorean theorem for hypotenuse
            @:h = Math.sqrt(x * x + y * y);
        @:return "translate(" + (x / h * labelr) + ',' +
           @:(y / h * labelr) + ")";
    @:})
    @:.attr("dy", ".35em")
    @:.attr("text-anchor", function (d) {
        @:// are we past the center?
        @:return (d.endAngle + d.startAngle) / 2 > Math.PI ?
            @:"end" : "start";
    @:})
    @:.text(function (d) { return d.data.name; });
}
else
{

}

Razor 语法总结:

1-内联表达式 用@符号开头写C#或者用Html代码写VB代码。示例:

@VariableName
@DateTime.Now // Return the current datetime in Razor
<p> @DateTime.Now </p>

2-多语句代码块: 要编写多个 Razor 语句,请将它们括在大括号中

  `@{
     Razor Stmts...
   }`

3- 显示代码块中的文本(这正是您所要求的)

您可以根据需要使用@<text> </text>来显示文本。例如:

@{
var x = DateTime.Now;
string hello = "Hello Razor!";
<text>The date is:</text> @date <br />
@message                               
}

您可以在此处查看关于 Razor 语法的精彩 post: http://weblogs.asp.net/scottgu/asp-net-mvc-3-razor-s-and-lt-text-gt-syntax

简而言之,这里应用的规则是:

您有一个代码块 - 您的 "if" - 在其中,需要代码,除非:

  1. 你在里面放了一个html标签。这样,"if" 块内的内容将被视为 HTML.
  2. 您使用了 <text></text> 标签。这样,text 标签内的内容将按照您放置的方式呈现,而不在其周围添加任何标签或文本,因此对于您的 javascript 代码,它将呈现您指定的代码。
  3. 您的文本前面有 @: 词素,它告诉剃须刀它后面的内容应该被视为 html/text。

简而言之,将您的代码改成这个就是您所需要的:

@if(Model.Labels)
{
    <text>
        arcs.append("text")
        .attr("transform", function (d) {
            var c = arc.centroid(d),
                    x = c[0],
                    y = c[1],
                    // pythagorean theorem for hypotenuse
                    h = Math.sqrt(x * x + y * y);
            return "translate(" + (x / h * labelr) + ',' +
                    (y / h * labelr) + ")";
            })
        .attr("dy", ".35em")
        .attr("text-anchor", function (d) {
            // are we past the center?
            return (d.endAngle + d.startAngle) / 2 > Math.PI ?
                    "end" : "start";
            })
        .text(function (d) { return d.data.name; });
    </text>
}
else
{

}