我想这很明显,但在我提交错误报告之前,我想知道我做错了。我使用ASP.NET MVC3 RC,使用Razor:
<div class="miniProfile">
Joined: @FormatTime(Model.Joined)<br />
@if (!String.IsNullOrWhiteSpace(Model.Location)) {
Location: @Model.Location<br />
}
Posts: @Model.PostCount<br />
@Html.ActionLink("Full Profile", "ViewProfile", new { id = Model.UserID }, new { target = "_blank" }) |
@Html.ActionLink("Send Private Message", "SendNew", "PrivateMessages", new { id = Model.UserID }) |
@Html.ActionLink("Send E-mail", "Send", "Email", new { id = Model.UserID })
@if (!String.IsNullOrWhiteSpace(Model.Web)) {
| <a href="@Model.Web" target="_blank">Visit user Web site: @Model.Web</a>
}
</div>
它在“位置”和最后一个条件的管道中窒息。如果我插入一些&lt; text&gt;标签,它的工作原理如下:
<div class="miniProfile">
Joined: @FormatTime(Model.Joined)<br />
@if (!String.IsNullOrWhiteSpace(Model.Location)) {
<text>Location: </text>@Model.Location<br />
}
Posts: @Model.PostCount<br />
@Html.ActionLink("Full Profile", "ViewProfile", new { id = Model.UserID }, new { target = "_blank" }) |
@Html.ActionLink("Send Private Message", "SendNew", "PrivateMessages", new { id = Model.UserID }) |
@Html.ActionLink("Send E-mail", "Send", "Email", new { id = Model.UserID })
@if (!String.IsNullOrWhiteSpace(Model.Web)) {
<text>| </text><a href="@Model.Web" target="_blank">Visit user Web site: @Model.Web</a>
}
</div>
尽管有一些试验和错误,但我无法弄清楚我在做什么是顽皮的。建议?
答案 0 :(得分:7)
您的标记应如下
<div class="miniProfile">
Joined: @FormatTime(Model.Joined)<br />
@if (!String.IsNullOrWhiteSpace(Model.Location)) {
<text>Location: @Model.Location<br /></text>
}
Posts: @Model.PostCount<br />
@Html.ActionLink("Full Profile", "ViewProfile", new { id = Model.UserID }, new { target = "_blank" }) |
@Html.ActionLink("Send Private Message", "SendNew", "PrivateMessages", new { id = Model.UserID }) |
@Html.ActionLink("Send E-mail", "Send", "Email", new { id = Model.UserID })
@if (!String.IsNullOrWhiteSpace(Model.Web)) {
<text>| <a href="@Model.Web" target="_blank">Visit user Web site: @Model.Web</a></text>
}
</div>
如果您有@if
语句,那么卷曲之后的任何内容仍被视为“代码”,因此您需要使用<text>
标记或{{1}来突破它语法。
这种行为的原因是,无论如何你经常会在条件中嵌套某种标记,在这种情况下,事情就会起作用:
@:
当您不希望将条件的内容包装在任何标记中时,@if(condition) {
<div>Some content</div>
}
标记适用于这种情况。
答案 1 :(得分:2)
你不能只在代码块中包含纯文本内容,Razor引擎无法弄清楚它是代码还是标记。这就是<text>
标签的含义,以消除歧义。你是说<text>
标签使其有效(这是答案,没有更多的事要做),或者它仍然无法与<text>
标签一起使用(尝试包装整个{{} 1}}阻止if
标记?