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